COLLATE (Transact-SQL)
Es una cláusula que se puede aplicar a una definición de base de datos o a una definición de columna para definir la intercalación, o a una expresión de cadena de caracteres para aplicar una conversión de intercalación.
Se aplica a: SQL Server (desde SQL Server 2008 hasta la versión actual), Windows Azure SQL Database (desde la versión inicial hasta la versión actual). |
Convenciones de sintaxis de Transact-SQL
Sintaxis
COLLATE { <collation_name> | database_default }
<collation_name> :: =
{ Windows_collation_name } | { SQL_collation_name }
Argumentos
collation_name
Es el nombre de la intercalación que se va a aplicar a la expresión, definición de columna o definición de base de datos. collation_name solo puede ser un valor Windows_collation_name o SQL_collation_name especificado. collation_name debe ser un valor literal. collation_name no se puede representar mediante una variable ni una expresión.Windows_collation_name es el nombre de intercalación de un nombre de intercalación de Windows.
SQL_collation_name es el nombre de intercalación de un nombre de intercalación de SQL Server.
Al aplicar una intercalación en el nivel de definición de base de datos, las intercalaciones solo Unicode de Windows no se pueden utilizar con la cláusula COLLATE.
database_default
Hace que la cláusula COLLATE herede la intercalación de la base de datos actual.
Comentarios
La cláusula COLLATE se puede especificar en varios niveles. Entre ellos, figuran:
Crear o modificar una base de datos.
Puede utilizar la cláusula COLLATE de la instrucción CREATE DATABASE o ALTER DATABASE para especificar la intercalación predeterminada de la base de datos. También puede especificar una intercalación al crear una base de datos utilizando SQL Server Management Studio. Si no especifica ninguna intercalación, se asigna a la base de datos la intercalación predeterminada de la instancia de SQL Server.
Nota
Las intercalaciones solo Unicode de Windows se pueden utilizar únicamente con la cláusula COLLATE para aplicar intercalaciones a los tipos de datos nchar, nvarchar y ntext de nivel de columna y de nivel de datos de expresión; no se pueden utilizar con la cláusula COLLATE para cambiar la intercalación de una instancia de la base de datos o del servidor.
Crear o modificar una columna de una tabla.
Puede especificar intercalaciones para cada columna de cadena de caracteres mediante la cláusula COLLATE de la instrucción CREATE TABLE o ALTER TABLE. También puede especificar una intercalación al crear una tabla utilizando SQL Server Management Studio. Si no especifica ninguna intercalación, se asigna a la columna la intercalación predeterminada de la base de datos.
También puede utilizar la opción database_default de la cláusula COLLATE para especificar que una columna de una tabla temporal utilice la intercalación predeterminada de la base de datos de usuario actual para la conexión en lugar de usar tempdb.
Convertir la intercalación de una expresión.
Puede utilizar la cláusula COLLATE para aplicar una expresión de caracteres a una intercalación concreta. La intercalación predeterminada de la base de datos actual se asigna a los literales y las variables de carácter. La intercalación de definición de la columna se asigna a las referencias de columna.
La intercalación de un identificador depende del nivel en que está definido. Se asigna a los identificadores de objetos de instancia, como los inicios de sesión y los nombres de base de datos, la intercalación predeterminada de la instancia. Se asigna a los identificadores de objetos de una base de datos, como nombres de tablas, vistas y columnas, la intercalación predeterminada de la base de datos. Por ejemplo, es posible crear dos tablas con nombres que solo se diferencian en las mayúsculas en una base de datos con intercalación que distinga entre mayúsculas y minúsculas, pero no se pueden crear en una base de datos con una intercalación que no distinga entre mayúsculas y minúsculas. Para obtener más información, vea Identificadores de base de datos..
Las variables, etiquetas GOTO, procedimientos almacenados temporales y tablas temporales pueden crearse cuando se asocia el contexto de conexión a una base de datos y, a continuación, se les hace referencia cuando se ha cambiado el contexto a otra base de datos. Los identificadores para variables, etiquetas GOTO, procedimientos almacenados temporales y tablas temporales se encuentran en la intercalación predeterminada de la instancia de servidor.
La cláusula COLLATE se puede aplicar solo para los tipos de datos char, varchar, text, nchar, nvarchar y ntext.
COLLATE usa collate_name para hacer referencia al nombre de la intercalación de SQL Server o de la intercalación de Windows que se va a aplicar a la expresión, definición de columna o definición de base de datos. collation_name solo puede ser un nombre Windows_collation_name o SQL_collation_name especificado y el parámetro debe contener un valor literal. collation_name no se puede representar mediante una variable ni una expresión.
Las intercalaciones se suelen identificar mediante un nombre de intercalación, excepto en el programa de instalación. En el programa de instalación, se especifica en su lugar el designador de intercalación raíz (configuración regional de la intercalación) para las intercalaciones de Windows y, a continuación, se especifican las opciones de ordenación que distinguen o no las mayúsculas de minúsculas, o acentos.
Puede ejecutar la función del sistema fn_helpcollations para recuperar una lista de todos los nombres de intercalación válidos para intercalaciones de Windows y de SQL Server:
SELECT name, description
FROM fn_helpcollations();
SQL Server solo admite páginas de códigos compatibles con el sistema operativo subyacente. Cuando ejecuta una acción que depende de intercalaciones, la intercalación de SQL Server utilizada por el objeto de referencia debe usar una página de códigos compatible con el sistema operativo del equipo. Entre estas acciones pueden incluirse las siguientes:
Especificar una intercalación predeterminada para una base de datos durante su creación o modificación.
Especificar una intercalación para una columna durante la creación o la modificación de una tabla.
Cuando se restaura o anexa una base de datos, la intercalación predeterminada de la base de datos y la intercalación de las columnas char, varchar y text o los parámetros de la base de datos deben ser compatibles con el sistema operativo.
Las traducciones de páginas de códigos se admiten para los tipos de datos char y varchar, pero no para el tipo de datos text. La pérdida de datos durante la traducción de páginas de códigos no se notifica.
Si la intercalación especificada o la intercalación usada por el objeto al que se hace referencia utiliza una página de códigos no admitida por Windows, SQL Server muestra un error.
Ejemplos
A.Especificar la intercalación durante una selección
En el ejemplo siguiente se crea la tabla simple y se insertan 4 filas. A continuación, el ejemplo aplica dos intercalaciones al seleccionar datos de la tabla, mostrando cómo Chiapas se ordena de manera diferente.
CREATE TABLE Locations
(Place varchar(15) NOT NULL);
GO
INSERT Locations(Place) VALUES ('Chiapas'),('Colima')
, ('Cinco Rios'), ('California');
GO
--Apply an typical collation
SELECT Place FROM Locations
ORDER BY Place
COLLATE Latin1_General_CS_AS_KS_WS ASC;
GO
-- Apply a Spanish collation
SELECT Place FROM Locations
ORDER BY Place
COLLATE Traditional_Spanish_ci_ai ASC;
GO
Estos son los resultados de la primera consulta.
Place
-------------
California
Chiapas
Cinco Rios
Colima
Estos son los resultados de la segunda consulta.
Place
-------------
California
Cinco Rios
Colima
Chiapas
B.Otros ejemplos
Para obtener ejemplos adicionales en los que se usa COLLATE, vea el ejemplo de CREATE DATABASE (Transact-SQL de SQL Server) G. Crear una base de datos y especificar un nombre de intercalación y sus opciones, y el ejemplo de ALTER TABLE (Transact-SQL) V. Cambiar la intercalación de columnas.
Vea también
Referencia
Prioridad de intercalación (Transact-SQL)
CREATE DATABASE (Transact-SQL de SQL Server)
DECLARE @local\_variable (Transact-SQL)