sql >> Base de Datos >  >> RDS >> Sqlserver

Cómo encontrar la intercalación en SQL Server (T-SQL)

La intercalación se puede especificar a nivel de servidor, nivel de base de datos, nivel de columna, nivel de expresión y nivel de identificador. Se requiere un método diferente para cada uno de estos.

Recopilación de nivel de servidor

Aquí se explica cómo encontrar la intercalación de nivel de servidor:

SELECT CONVERT (varchar, SERVERPROPERTY('collation')) AS 'Server Collation';

Esto devuelve la intercalación así:

Server Collation
----------------------------
SQL_Latin1_General_CP1_CI_AS


También puede usar el sp_helpsort procedimiento almacenado para devolver la intercalación predeterminada para el servidor:

EXECUTE sp_helpsort;

Esto devuelve la intercalación así:

Server default collation
----------------------------
Latin1-General, case-insensitive, accent-sensitive, kanatype-insensitive, width-insensitive for Unicode Data, SQL Server Sort Order 52 on Code Page 1252 for non-Unicode Data

Cotejo de nivel de base de datos

Ejecute la siguiente consulta para devolver la intercalación de una base de datos específica. El WHERE La cláusula le permite limitar los resultados a la(s) base(s) de datos que le interesan:

SELECT 
    name, 
    collation_name 
FROM sys.databases
WHERE name = 'Music';

Esto da como resultado algo como esto:

name   collation_name              
-----  ----------------------------
Music  SQL_Latin1_General_CP1_CI_AS

En este caso, especificamos la base de datos llamada Music .

También puede utilizar DATABASEPROPERTYEX() función para devolver la intercalación predeterminada para una base de datos:

SELECT DATABASEPROPERTYEX('Music', 'Collation') AS Collation;

Colección de nivel de columna

La intercalación también se puede especificar en el nivel de columna. Para averiguar qué intercalación usa una columna específica, ejecute una consulta contra sys.columns . Así:

SELECT 
    name, 
    collation_name 
FROM sys.columns 
WHERE name = N'ArtistName';

Esto da como resultado algo como esto:

name   collation_name              
----------  ----------------------------
ArtistName  SQL_Latin1_General_CP1_CI_AS

Recopilación de nivel de expresión e identificador

La intercalación se puede aplicar a una expresión de cadena de caracteres para aplicar una conversión de intercalación. Por ejemplo, puede utilizar COLLATE cláusula en un SELECT instrucción para especificar la intercalación que se va a utilizar. Así:

USE Music;
SELECT ArtistId, ArtistName
FROM Artists
ORDER BY ArtistName COLLATE Latin1_General_CI_AI;

Esa intercalación usa CI para mayúsculas y minúsculas, y AI para insensible al acento.

Podríamos cambiar eso a CS para mayúsculas y minúsculas, y AS para sensibles al acento, y los resultados de la consulta pueden ordenarse de manera diferente (dependiendo de los datos):

USE Music;
SELECT ArtistId, ArtistName
FROM Artists
ORDER BY ArtistName COLLATE Latin1_General_CS_AS;

Por lo tanto, esto le permite anular la intercalación que se aplica en la base de datos o en el nivel de columna cuando se ejecuta una consulta.