Ver Mensaje Individual
  #2 (permalink)  
Antiguo 28/12/2007, 22:16
Avatar de Beakdan
Beakdan
 
Fecha de Ingreso: diciembre-2001
Ubicación: Monterrey, Nuevo León
Mensajes: 433
Antigüedad: 23 años
Puntos: 7
Re: Sql_latin1_general_cp1_ci_as

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.