COLLATE (Transact-SQL)

Se aplica a:SQL ServerAzure SQL DatabaseInstancia administrada de Azure SQLAzure Synapse AnalyticsAnalytics Platform System (PDW)Almacenamiento en Microsoft FabricBase de datos SQL en Microsoft Fabric

Define una intercalación de una base de datos o una columna de tabla, o una operación de conversión de intercalación cuando se aplica a una expresión de cadena de caracteres. El nombre de intercalación puede ser un nombre de intercalación de Windows o un nombre de intercalación de SQL. Si no se especifica durante la creación de la base de datos, a esta se le asigna la intercalación predeterminada de la instancia de SQL Server. Si no se especifica durante la creación de la columna de tabla, a la columna se le asigna la intercalación predeterminada de la base de datos.

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 solamente puede ser un Windows_collation_name o un SQL_collation_name especificado. collation_name debe ser un valor literal. collation_name no se puede representar mediante una variable o 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.

Nota:

En Microsoft Fabric Data Warehouse, la cláusula COLLATE de una instrucción SELECT no está restringida y se puede aplicar con intercalaciones no admitidas. En Microsoft Fabric Data Warehouse, todos los almacenes están configurados de forma predeterminada con intercalación con distinción de mayúsculas y minúsculas (CS) Latin1_General_100_BIN2_UTF8. También puede crear almacenes con intercalación sin distinción entre mayúsculas y minúsculas (CI)Latin1_General_100_CI_AS_KS_WS_SC_UTF8.

Sin embargo, solo se pueden usar intercalaciones admitidas con la cláusula COLLATE en instrucciones CREATE TABLE, ALTER TABLE ADD nullable column, SELECT INTOy CREATE TABLE AS SELECT (CTAS).

database_default Hace que la COLLATE cláusula herede la recopilación de la base de datos actual.

Observaciones

La COLLATE cláusula puede especificarse en varios niveles. Entre ellas, se incluyen las siguientes:

  1. Crear o modificar una base de datos.

    Puedes usar la COLLATE cláusula de la CREATE DATABASE instrucción o ALTER DATABASE para especificar la clasificació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 una intercalación, a la base de datos se le asigna la intercalación predeterminada de la instancia de SQL Server.

    Nota:

    Las colaciones únicas Unicode de Windows solo pueden usarse con la COLLATE cláusula para aplicar las colaciones a los tipos de datos nchar, nvarchar y ntext en datos a nivel de columna y expresión; estas no pueden usarse con la COLLATE cláusula para definir o cambiar la colocación de una base de datos o instancia de servidor.

  2. Crear o modificar una columna de una tabla.

    Puedes especificar las colaciones para cada columna de cadena de caracteres usando la COLLATE cláusula de la CREATE TABLE sentencia o ALTER TABLE . También puede especificar una intercalación al crear una tabla utilizando SQL Server Management Studio. Si no especifica una intercalación, a la columna se le asigna la intercalación predeterminada de la base de datos.

    También puedes usar la database_default opción de la COLLATE cláusula para especificar que una columna en una tabla temporal use el valor por defecto de la base de datos de usuario actual para la conexión en lugar de tempdb.

  3. Convertir la intercalación de una expresión.

    Puedes usar la COLLATE cláusula para aplicar una expresión de carácter a una determinada colocación. 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 el que se define. 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, dos tablas con nombres diferentes solo se pueden crear en una base de datos con intercalación que distingue mayúsculas de minúsculas, pero es posible que no se creen en una base de datos con intercalación que no distingue mayúsculas de minúsculas. Para obtener más información, vea Database Identifiers.

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 COLLATE cláusula solo puede aplicarse a los tipos de datos char, varchar, text, nchar, nvarchar y ntext .

COLLATEutiliza collate_name para referirse al nombre de la SQL Server colación o la Windows que se aplicará a la expresión, la definición de columna o la definición de base de datos. collation_name solamente puede ser un Windows_collation_name o un SQL_collation_name especificado y el parámetro debe contener un valor literal. collation_name no se puede representar mediante una variable o 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, después, 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.

Nota:

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. No se notifica la pérdida de datos durante las traducciones de páginas de códigos.

Si la intercalación especificada o la intercalación usada por el objeto al que se hace referencia usa una página de códigos no admitida por Windows, SQL Server muestra un error.

Ejemplos

A. Especificar intercalación durante una instrucción SELECT

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 a 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
-- Using LIKE
SELECT Place FROM Locations
WHERE Place COLLATE Latin1_General_CI_AS LIKE 'C%' ASC;
GO

Estos son los resultados de la primera consulta de SELECT.

Place
-------------
California
Chiapas
Cinco Rios
Colima

Estos son los resultados de la segunda consulta SELECT.

Place
-------------
California
Cinco Rios
Colima
Chiapas

Estos son los resultados de la tercera consulta SELECT.

Place
-------------
Chiapas
Colima
Cinco Rios
California

B. Ejemplos adicionales

Para más ejemplos que usan COLLATE, véase CREATE DATABASE y ALTER TABLE.