在数据库中的记录中搜索特殊字符

时间:2012-12-03 06:52:47

标签: sql-server ssms

我在SQL Server中有一个数据库,里面有100个表。

我需要编写一个查询来解析所有100个表中所有列中的所有行,并返回具有特殊字符%,#的行。

如何编写解析所有表中所有行的查询?

1 个答案:

答案 0 :(得分:1)

也许不是那么微妙的解决方案,但功能正常:

USE TSQL2012
GO

DECLARE @ColumnName VARCHAR (50)
DECLARE @TableName VARCHAR (50)
DECLARE @SchemaName VARCHAR (50)
DECLARE @SQLQuery NVARCHAR (200)

DECLARE findSpecialCharacters CURSOR
FOR 
    SELECT c.name, o.name, s.name from sys.columns c
        INNER JOIN sys.objects o ON c.object_id = o.object_id
        INNER JOIN sys.schemas s ON o.schema_id = s.schema_id
    WHERE o.type = 'U'
OPEN findSpecialCharacters
FETCH NEXT FROM findSpecialCharacters
INTO @ColumnName, @TableName, @SchemaName
WHILE @@FETCH_STATUS = 0    
BEGIN
    SET @SQLQuery = 
        'SELECT ' + @ColumnName + ', * FROM ' + 
            @SchemaName + '.' + @TableName + 
        ' WHERE (' + @ColumnName + ' LIKE ' + 
            CHAR(39) + CHAR(37) + '[,]' + CHAR(37) + CHAR(39) + ') OR (' + 
         @ColumnName + ' LIKE ' + 
            CHAR(39) + CHAR(37) + '[#]' + CHAR(37) + CHAR(39) + ') OR (' + 
         @ColumnName + ' LIKE ' + 
            CHAR(39) + CHAR(37) + '[%]' + CHAR(37) + CHAR(39) + ')'

    PRINT 'Table: ' + @TableName + '; Column: ' + @ColumnName
    PRINT @SQLQuery
    EXEC sp_executesql @SQLQuery



    FETCH NEXT FROM findSpecialCharacters
    INTO @ColumnName, @TableName, @SchemaName
END
CLOSE findSpecialCharacters
DEALLOCATE findSpecialCharacters

首先,我在所有表中搜索所有列,并将结果集放入FOR SELECT游标语句中。如果table有五列,那么我的光标将创建五个不同的结果集,具体取决于哪个列是WHERE过滤器。

但是,为了区分哪个列正在搜索,我简单地将该列放在选择列表中的第一列。