martes, 14 de mayo de 2013

T-SQL para cambiar la intercalación

Enunciado

Cambiar la intercalación de todas las columnas de todas las tablas de una base de datos.

Solución

Ejecutas el siguiente T-sql en una consulta SSMS.
DECLARE @collation NVARCHAR(64)
SET @collation = 'Modern_Spanish_CI_AI'

SELECT 
    'ALTER TABLE [' + INFORMATION_SCHEMA.COLUMNS.TABLE_SCHEMA  + '].[' + INFORMATION_SCHEMA.COLUMNS.TABLE_NAME + '] '
  + 'ALTER COLUMN [' + COLUMN_NAME + '] '
  + DATA_TYPE + '(' + CASE CHARACTER_MAXIMUM_LENGTH 
        WHEN -1 THEN 'MAX' 
        ELSE CAST(CHARACTER_MAXIMUM_LENGTH AS VARCHAR) END + ') '
  + 'COLLATE ' + @collation + ' '
  + CASE WHEN IS_NULLABLE = 'NO' THEN 'NOT NULL' ELSE 'NULL' END
FROM INFORMATION_SCHEMA.columns
INNER JOIN INFORMATION_SCHEMA.TABLES
ON INFORMATION_SCHEMA.TABLES.TABLE_NAME=INFORMATION_SCHEMA.COLUMNS.TABLE_NAME
WHERE  COLLATION_NAME IS NOT NULL
AND COLLATION_NAME <> @collation
AND INFORMATION_SCHEMA.TABLES.TABLE_TYPE ='BASE TABLE'

El resultado lo copias y lo pegas en otra ventana de consulta.
Revisa ese código generado y si está correcto ejecutas.

No hay comentarios: