我在 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
游标语句中。如果表有五列,那么我的游标将创建五个不同的结果集,具体取决于哪一列是 WHERE 过滤器。
但是,为了区分正在搜索的列,我简单地将该列作为选择列表中的第一个。