2012-04-11 17 views
0

Ich habe 15 SQL Server-Tabellen mit jeweils etwa 50 Spalten.Alle Spalten mit ungültigen Daten zurückgeben SQL Server 2005 Query

Einige dieser Spalten enthalten Zeilen, die Anführungszeichen, Kommas und Tabulatoren enthalten.

Ich habe eine Funktion, die alle diese aus der Zeile mit dem Spaltennamen entfernt, aber ich weiß nicht, in welchen Spalten das Problem auftritt.

Ich möchte eine SQL Server 2005-Abfrage, die Spaltennamen zurückgeben kann, die die schlechten Daten einen Tabellennamen gegeben haben.

Antwort

4

Es gibt keine Möglichkeit, dies ohne eine Art von dynamischem SQL zu tun. Anstatt durch diese Reifen zu springen, schreibe ich normalerweise ein Skript, das ein anderes Skript generiert.

Zunächst wird der Umriss eines Skripts:

declare @cols table (name varchar(500)) 
... 
select * from @cols 

Dann eine Abfrage wie diese verwenden, um eine Reihe von Anweisungen zu erzeugen, die jede Spalte für schlechte Werte überprüfen wird:

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

Es ist nur ein Es ist wichtig, diese Abfrage auszuführen und dann die Ergebnisse in Ihr Skript einzufügen und auszuführen. Sie können dies auch leicht ändern, um an mehreren Tabellen gleichzeitig zu arbeiten.

+0

Generieren von SQL-Code mit SQL ist immer ein netter Trick. Vergiss nicht nvarchar. – usr