我有 15 个 SQL Server 表,每个表大约有 50 列。
其中一些列的行包含引号、逗号和制表符。
我有一个函数可以从给定列名的行中删除所有这些,但我不知道哪些列有问题。
我想要一个 SQL Server 2005 查询,它可以返回具有给定表名的坏数据的列名。
我有 15 个 SQL Server 表,每个表大约有 50 列。
其中一些列的行包含引号、逗号和制表符。
我有一个函数可以从给定列名的行中删除所有这些,但我不知道哪些列有问题。
我想要一个 SQL Server 2005 查询,它可以返回具有给定表名的坏数据的列名。
如果没有某种动态 SQL,您将无法做到这一点。我通常不会跳过这些障碍,而是编写一个生成另一个脚本的脚本。
首先,一个脚本的大纲:
declare @cols table (name varchar(500))
...
select * from @cols
然后使用这样的查询来生成一系列语句,这些语句将检查每一列的错误值:
SELECT 'IF EXISTS (SELECT * FROM [' + TABLE_NAME + ']' +
' WHERE [' + COLUMN_NAME + '] like ''%,%''' +
' or [' + COLUMN_NAME + '] like ''%''''%''' +
' or [' + COLUMN_NAME + '] like ''%'' + char(9) + ''%'')' +
' insert into @cols values (''' + COLUMN_NAME + ''')'
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'Tablename' and DATA_TYPE in ('char','varchar')
只需运行此查询,然后将结果粘贴到您的脚本中并运行它。您还可以轻松地修改它以同时处理多个表。