Как установить сопоставление для соединения в SQL Server?

Как я могу установить сопоставление, которое SQL Server будет использовать в течение этого соединения?

Только когда я подключусь к SQL Server, я узнаю, какое сопоставление я хочу использовать .

например браузер с языком fr-IT подключился к веб-сайту. Любые запросы, которые я выполняю в этом соединении, я хочу следовать французскому языку, варианту Италии сопоставлению.

Я предполагаю гипотетическое свойство уровня соединения, похожее на SET ANSI_NULLS OFF , но для сопоставления 1 :

SET COLLATION_ORDER 'French_CI_AS'

SELECT TOP 100 FROM Orders
ORDER BY ProjectName

и позже

SELECT * FROM Orders
WHERE CustomerID = 3277 
AND ProjectName LIKE '%l''ecole%'

и позже

UPDATE Quotes
SET IsCompleted = 1
WHERE QuoteName = 'Cour de l''école'

В то же время время, когда китайский клиент подключается:

SET COLLATION_ORDER Chinese_PRC_CI_AI_KS_WS

SELECT TOP 100 FROM Orders
ORDER BY ProjectName

или

SELECT * FROM Orders
WHERE CustomerID = 3277 
AND ProjectName LIKE '學校'

или

UPDATE Quotes
SET IsCompleted = 1
WHERE QuoteName = '學校的操場'

Теперь я мог изменять каждый оператор SELECT в системе, чтобы разрешить мне для передачи сопоставления:

SELECT TOP 100 FROM Orders
WHERE CustomerID = 3278
ORDER BY ProjectName COLLATE French_CI_AS

Но вы не можете передать порядок сопоставления в качестве параметра хранимой процедуре:

CREATE PROCEDURE dbo.GetCommonOrders 
   @CustomerID int, @CollationOrder varchar(50)
AS

SELECT TOP 100 FROM Orders
WHERE CustomerID = @CustomerID
ORDER BY ProjectName COLLATE @CollationOrder

И предложение COLLATE не может мне помочь при выполнении UPDATE или SELECT .

Примечание: Все строковые столбцы в базе данных уже являются nchar , nvarchar или ntext . я не говорю о сопоставлении по умолчанию, применяемом к серверу, базе данных, таблице или столбцу для столбцов, отличных от Unicode (например, char , varchar , text ) . я говорю о сопоставлении, используемом SQL Server при сравнении и сортировке строк.


Как я могу указать сопоставление для соединения ?

См. также

1 гипотетический sql, который демонстрирует проблемы с локалью

11
задан Ian Boyd 27 September 2018 в 13:57
поделиться