Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come trovare le regole di confronto in SQL Server (T-SQL)

Le regole di confronto possono essere specificate a livello di server, database, colonna, espressione e identificatore. Per ognuno di questi è richiesto un metodo diverso.

Confronto a livello di server

Ecco come trovare le regole di confronto a livello di server:

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

Questo restituisce le regole di confronto in questo modo:

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


Puoi anche usare sp_helpsort stored procedure per restituire le regole di confronto predefinite per il server:

EXECUTE sp_helpsort;

Questo restituisce le regole di confronto in questo modo:

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

Confronto a livello di database

Eseguire la query seguente per restituire le regole di confronto di un database specifico. Il WHERE La clausola ti consente di restringere i risultati ai database che ti interessano:

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

Ciò si traduce in qualcosa del genere:

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

In questo caso, abbiamo specificato il database chiamato Music .

Puoi anche usare DATABASEPROPERTYEX() funzione per restituire le regole di confronto predefinite per un database:

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

Confronto a livello di colonna

Le regole di confronto possono essere specificate anche a livello di colonna. Per scoprire quali regole di confronto utilizza una colonna specifica, esegui una query su sys.columns . In questo modo:

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

Ciò si traduce in qualcosa del genere:

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

Confronto a livello di espressione e identificatore

Le regole di confronto possono essere applicate a un'espressione stringa di caratteri per applicare un cast di regole di confronto. Ad esempio, puoi utilizzare il COLLATE clausola in un SELECT istruzione per specificare le regole di confronto da utilizzare. In questo modo:

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

Tale confronto utilizza CI per la distinzione tra maiuscole e minuscole e AI per insensibili all'accento.

Potremmo cambiarlo in CS per la distinzione tra maiuscole e minuscole e AS per l'accento sensibile e i risultati della query possono essere ordinati in modo diverso (a seconda dei dati):

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

Quindi, ciò ti consente di ignorare le regole di confronto applicate a livello di database o colonna durante l'esecuzione di una query.