SQL Server にデータベースがあり、その中に 100 個のテーブルがあります。
100 個のテーブルすべてのすべての列のすべての行を解析し、特殊文字を含む行を返すクエリを作成する必要があります%,#
。
すべてのテーブルのすべての行を解析するクエリを作成するにはどうすればよいですか?
SQL Server にデータベースがあり、その中に 100 個のテーブルがあります。
100 個のテーブルすべてのすべての列のすべての行を解析し、特殊文字を含む行を返すクエリを作成する必要があります%,#
。
すべてのテーブルのすべての行を解析するクエリを作成するにはどうすればよいですか?
それほど微妙な解決策ではないかもしれませんが、機能的です:
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 つの異なる結果セットを作成します。
ただし、どの列が検索されているかを区別するために、その列を選択リストの最初に置くだけです。