2009-08-16 26 views
7

Tengo un montón de columnas NVARCHAR que sospecho que contienen datos perfectamente almacenables en columnas VARCHAR. Sin embargo, no puedo ir y cambiar el tipo de columnas en VARCHAR y esperar lo mejor, tengo que hacer algún tipo de comprobación.Determinar el contenido varchar en columnas nvarchar

Deseo realizar la conversión porque los datos son estáticos (no cambiarán en el futuro) y las columnas están indexadas y se beneficiarían de un índice más pequeño (varchar) en comparación con el índice real (nvarchar).

Si simplemente digo

ALTER TABLE TableName ALTER COLUMN columnName VARCHAR(200) 

entonces no se producirá un error o una advertencia. Los datos Unicode se truncarán/perderán.

¿Cómo puedo comprobar?

+0

hacer que tienen entorno de pruebas/desarrollo? –

+0

En el trabajo lo hago, y lo uso. Pero aquí tenía que dar una bofetada a algo pequeño para mi propio uso, solo uso de una vez. –

+0

Esperando que google recoja esta frase: prueba si nvarchar solo contiene datos varchar – Thymine

Respuesta

22

¿Por qué no lanzar allí y volver para ver qué datos se pierden?

Esto supone que la columna es de tipo nvarchar (200) para comenzar con

SELECT * 
FROM TableName 
WHERE columnName <> CAST(CAST(columnName AS varchar(200)) AS nvarchar(200)) 
+0

¡Funcionó como un amuleto! ¡Gracias! –

1

Hmm interesting.

No estoy seguro de que pueda hacer esto en una consulta SQL. ¿Estás feliz de hacerlo en código? Si es así, puede obtener todos los registros, luego recorrer todos los caracteres de la cadena y verificar. Pero hombre, es un camino lento.

Cuestiones relacionadas