È possibile scorrere le viste di sistema in INFORMATION_SCHEMA ed eseguire SQL dinamico per farlo. La vista rilevante dovrebbe essere INFORMATION_SCHEMA.COLUMNS.
Un approccio migliore è probabilmente quello di avere l'interfaccia utente con esso quando deve visualizzare i valori. Hai un metodo per evitare che valori come questi entrino nel DB in futuro?
Ecco alcuni esempi di codice che dovrebbe iniziare:
DECLARE
@table_schema SYSNAME,
@table_name SYSNAME,
@column_name SYSNAME,
@cmd VARCHAR(MAX)
DECLARE cur_string_columns AS
SELECT
TABLE_SCHEMA,
TABLE_NAME,
COLUMN_NAME
FROM
INFORMATION_SCHEMA.COLUMNS
WHERE
DATA_TYPE IN ('VARCHAR', 'CHAR') AND -- NVARCHAR and NCHAR?
CHARACTER_MAXIMUM_LENGTH > 1
OPEN cur_string_columns
FETCH NEXT FROM cur_string_columns INTO @table_schema, @table_name, @column_name
WHILE (@@FETCH_STATUS = 0)
BEGIN
SELECT @cmd = 'UPDATE
' + QUOTENAME(@table_schema) + '.' + QUOTENAME(@table_name) + '
SET ' + QUOTENAME(@column_name) + ' = REPLACE(' + QUOTENAME(@column_name) + ', CHAR(13) + CHAR(10), CHAR(10))'
EXEC(@cmd)
FETCH NEXT FROM cur_string_columns INTO @table_schema, @table_name, @column_name
END
CLOSE cur_string_columns
DEALLOCATE cur_string_columns
Se si dispone di tabelle di grandi dimensioni, questo potrebbe richiedere molto tempo per l'esecuzione. Inoltre, in modo ottimale si aggiornerebbe ogni tabella una sola volta, mentre questa verrà aggiornata una volta per ogni colonna di stringhe nella tabella. Se lo stavo facendo su un grande database, avrei cambiato lo script per renderlo conto - ordina il tuo cursore secondo lo schema della tabella e il nome della tabella, aggiungi alla parte SET della stringa per ogni colonna nella tabella, solo EXEC (@ cmd) quando la tabella cambia e quindi ripristina la stringa SET.
fonte
2010-06-24 18:33:15
Fantastica idea, mi piace la creatività e la brevità. Grazie. Nota: ho aggiunto una condizione nella parte inferiore del modulo "dove sc.name in ('my_schema-1', 'my_schema_2', ...)" per limitarlo ai miei schemi. Ho anche aggiunto un punto e virgola alla fine della stringa nella prima riga per consentire di incollare ed eseguire i risultati in una finestra di query. –