• 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 !=''

    结果如下图所示:

  • 相关阅读:
    用mkdirs创建目录
    关于布局(Layout)的一切
    用HTTP操作和文件操作把网页下载到sd卡
    OpenStack计费项目Cloudkitty系列详解(一)
    OpenStack/Gnocchi简介——时间序列数据聚合操作提前计算并存储起来,先算后取的理念
    python-RabbitMQ
    1go基本语法
    openstack多region配置
    cinder 挂载卷和 iSCSI原理
    Host aggregate分区
  • 原文地址:https://www.cnblogs.com/PrintY/p/16292609.html
Copyright © 2020-2023  润新知