2012-04-11 14 views
0

15個のSQL Serverテーブルがあり、それぞれ約50個の列があります。すべての列に不良データが返されるSQL Server 2005クエリ

これらの列には、引用符、カンマ、タブを含む行があります。

私は、列名が与えられた行からこれらをすべて削除する機能を持っていますが、どの列に問題があるのか​​わかりません。

テーブル名が与えられた不正なデータを返すSQL Server 2005クエリが必要です。

答えて

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') 

それはちょうどですこのクエリを実行してから、結果をスクリプトに貼り付けて実行してください。一度に複数のテーブルで動作するように簡単に修正することもできます。

+0

SQLを使用したSQLコードの生成は、常に素晴らしいトリックです。 nvarcharを忘れないでください。 – usr

関連する問題