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カーソルステートメントに入れました。テーブルに 5 つの列がある場合、どの列が WHERE フィルターであるかに応じて、カーソルは 5 つの異なる結果セットを作成します。

ただし、どの列が検索されているかを区別するために、その列を選択リストの最初に置くだけです。

于 2013-01-25T14:10:46.077 に答える