Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да намерите съпоставянето в SQL Server (T-SQL)

Съпоставянето може да бъде определено на ниво сървър, ниво на база данни, ниво на колона, ниво на израз и ниво на идентификатор. За всеки от тях е необходим различен метод.

Съпоставяне на ниво сървър

Ето как да намерите съпоставянето на ниво сървър:

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

Това връща съпоставянето по следния начин:

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


Можете също да използвате sp_helpsort съхранена процедура за връщане на съпоставянето по подразбиране за сървъра:

EXECUTE sp_helpsort;

Това връща съпоставянето по следния начин:

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

Сравняване на ниво база данни

Изпълнете следната заявка, за да върнете съпоставянето на конкретна база данни. WHERE клаузата ви позволява да стесните резултатите до базата/ите, от които се интересувате:

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

Това води до нещо подобно:

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

В този случай посочихме базата данни, наречена Music .

Можете също да използвате DATABASEPROPERTYEX() функция за връщане на съпоставянето по подразбиране за база данни:

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

Сравниване на ниво колона

Съпоставянето може да бъде определено и на ниво колона. За да разберете какво съпоставяне използва конкретна колона, изпълнете заявка срещу sys.columns . Като това:

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

Това води до нещо подобно:

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

Сравниване на ниво израз и идентификатор

Съпоставянето може да се приложи към израз на низ от символи, за да се приложи привеждане на съпоставяне. Например, можете да използвате COLLATE клауза в SELECT оператор, за да посочите съпоставянето, което да се използва. Като това:

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

Това съпоставяне използва CI за независимо от главните букви и AI за нечувствителни към акценти.

Можем да променим това на CS за чувствителни към малки и малки букви и AS за чувствителни на акценти и резултатите от заявката могат да бъдат сортирани по различен начин (в зависимост от данните):

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

Така че това ви позволява да замените съпоставянето, което се прилага на ниво база данни или колона, когато изпълнявате заявка.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Добавете редуващ се цвят на ред към отчета за услугите за отчитане на SQL Server

  2. Конфигурация за репликация на транзакции на SQL Server

  3. Entity Framework 6 - Заявки за време

  4. SQL LocalDB срещу SQL Server CE

  5. Има ли еквивалент на SELECT ... INTO OUTFILE в SQL Server Management Studio?