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.