2

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

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

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

4

1 回答 1

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游标语句中。如果表有五列,那么我的游标将创建五个不同的结果集,具体取决于哪一列是 WHERE 过滤器。

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

于 2013-01-25T14:10:46.077 回答