• sql server 查找包含特殊符号的表名


    思路,通过正则替换,把标明中合规字符都删除掉,剩下不合规的,那么就能找到不合规的表名字。

    1、创建支持正则替换函数

    --如果存在则删除原有函数  
    IF OBJECT_ID(N'dbo.RegexReplace') IS NOT NULL   
        DROP FUNCTION dbo.RegexReplace  
    GO  
    --开始创建正则替换函数  
     CREATE FUNCTION dbo.RegexReplace  
    (  
        @string VARCHAR(MAX),   --被替换的字符串  
        @pattern VARCHAR(255),  --替换模板  
        @replacestr VARCHAR(255),   --替换后的字符串  
        @IgnoreCase INT = 0 --0区分大小写 1不区分大小写  
    )  
    RETURNS VARCHAR(8000)  
    AS   
    BEGIN  
        DECLARE @objRegex INT, @retstr VARCHAR(8000)  
        --创建对象  
        EXEC sp_OACreate 'VBScript.RegExp', @objRegex OUT  
        --设置属性  
        EXEC sp_OASetProperty @objRegex, 'Pattern', @pattern  
        EXEC sp_OASetProperty @objRegex, 'IgnoreCase', @IgnoreCase  
        EXEC sp_OASetProperty @objRegex, 'Global', 1  
        --执行  
        EXEC sp_OAMethod @objRegex, 'Replace', @retstr OUT, @string, @replacestr  
        --释放  
        EXECUTE sp_OADestroy @objRegex  
        RETURN @retstr  
    END  
    GO  
    --保证正常运行的话,需要将Ole Automation Procedures选项置为1    
    EXEC sp_configure 'show advanced options', 1    
    RECONFIGURE WITH OVERRIDE   
    EXEC sp_configure 'Ole Automation Procedures', 1    
    RECONFIGURE WITH OVERRIDE

    2、通过sql查询出当前库所有表名,然后通过正则函数替换掉合规字符

    SELECT * FROM 
    (
    	select concat(s.name ,concat('.',t.name)) as tableName 
    	,t.name
    	,dbo.RegexReplace(t.name, '[a-zA-Z0-9\u4e00-\u9fa5]', '',1) AS NAME2
    	from sys.tables t left join sys.schemas s
    	on t.schema_id=s.schema_id 
    	--order by tableName asc;
    )A WHERE A.NAME2 !=''

    结果如下图所示:

  • 相关阅读:
    在react中实现CSS模块化
    react 组件的生命周期
    HTTP缓存机制与原理
    H5新增API和操作DOM
    js操作json方法总结
    gulp详细教程——前端自动化构建工具
    JavaScript你必须掌握的8大知识点
    HTTP请求与服务器响应流程
    max-height实现任意高度元素的展开收缩动画
    移动端轮播图手势分析+源码
  • 原文地址:https://www.cnblogs.com/PrintY/p/16292609.html
Copyright © 2020-2023  润新知