2009-12-03 53 views

Respuesta

14

Aquí, para empezar:

Select 'Alter Table [' + TABLE_SCHEMA + '].[' + TABLE_NAME + '] Alter Column [' + COLUMN_NAME + '] VarChar(' + CAST(CHARACTER_MAXIMUM_LENGTH As VARCHAR) + ')' 
From INFORMATION_SCHEMA.COLUMNS 
WHERE DATA_TYPE = 'NVARCHAR' 

Esto generará todas las declaraciones alter necesarios para que (cortar, pegar, correr).

Tenga en cuenta que esto no tiene en cuenta ninguna restricción.

+1

+1 perfecto. Obtuve la misma solución ... pero con una consulta muy, muy fea y complicada ... – Jonathan

+0

+1 Técnica impresionante :-) –

+0

@Jonathan ¿Cómo uso el código en esta respuesta para "generar todas las declaraciones alteradas necesarias" en SSQL Management Studio para que pueda "cortar, pegar, ejecutar"? –

3

Pregunte en el arco de datos para hacerlo?

o

generar una secuencia de comandos de todos los objetos en su sistema, alterar continuación de nvarchar, a continuación, crear una nueva base de datos e importar los datos en él desde el antiguo.

o

Escribir alterar las secuencias de comandos para actualizar la base de datos existente.
(. Esto puede ser el mejor enfoque si se trata de una base de datos de producción, o una base de datos de cliente)

+4

adscripción "pedir a los datos arquee para hacerlo". –

+0

No olvide verificar primero si tiene datos que no se convertirán a varchar. Acepto que si el arquitecto de datos quiere esto, le corresponde a él escribir los scripts para hacerlo. – HLGEM

4

el fin de manejar MAX y excluir a los sysdiagrams niggly:

SELECT 
' 
ALTER TABLE [' + TABLE_SCHEMA + '].[' + TABLE_NAME + '] 
ALTER COLUMN [' + COLUMN_NAME + '] 
VARCHAR(' + 
    (CASE WHEN CHARACTER_MAXIMUM_LENGTH = -1 
     THEN 'MAX' 
     ELSE CAST(CHARACTER_MAXIMUM_LENGTH AS VARCHAR) 
    END) 
+ ') 
' 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE DATA_TYPE = 'NVARCHAR' AND TABLE_NAME <> 'SYSDIAGRAMS' 
Cuestiones relacionadas