0

我有 15 个 SQL Server 表,每个表大约有 50 列。

其中一些列的行包含引号、逗号和制表符。

我有一个函数可以从给定列名的行中删除所有这些,但我不知道哪些列有问题。

我想要一个 SQL Server 2005 查询,它可以返回具有给定表名的坏数据的名。

4

1 回答 1

4

如果没有某种动态 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')

只需运行此查询,然后将结果粘贴到您的脚本中并运行它。您还可以轻松地修改它以同时处理多个表。

于 2012-04-11T21:53:56.987 回答