El collation se especifica a nivel de columna al crear la tabla, para columnas de tipo caracter. En caso de que no indiques el collation, el collation asignado por defecto es el especificado al crear la base de datos.
Por lo tanto, aún cuando a nivel de base de datos esté especificado un collation específico, no significa que los datos de tipo caracter en las tablas tengan este collation, y aún dentro de una misma tabla, no necesariamente las columnas de tipo caracter tendrán el mismo.
Para averiguar el collation de una base de datos, consulta la vista de sistema
sys.databases:
Código:
SELECT name, collation_name
FROM sys.databases
Para cambiar el collation de una base de datos utiliza
alter database:
Código:
ALTER DATABASE Base_de_Datos COLLATE Sql_Latin1_General_CP1_CI_AS
Considera que objetos dependientes del esquema de la base de datos (como constraints) deben ser eliminado antes y recreados despues de ejecutar la sentencia anterior. El efecto de esta sentencia es que nuevos objetos creados usarán por defecto el collation especificado. Los objetos existentes no cambian su collation.
Para averiguar el collation de las columnas en una tabla, utiliza el procedimiento sp_help. Por ejemplo:
Código:
execute sp_help 'dbo.productos'
El collation se cambia columna por columna con
alter table alter colum indicando exactamente las mismas especificaciones de la columna y el nuevo collation. Suponiendo que exista una columna codigo(char(10) not null) en una tabla productos:
Código:
ALTER TABLE dbo.productos
ALTER COLUMN codigo CHAR(10) COLLATE Sql_Latin1_General_CP1_CI_AS NOT NULL
Considera que si existe algún objeto dependiente de la columna(índices, constraints, etc), no puedes cambiar el collation. Deberás destruir el objeto antes y recrearlo después.
Saludos.