Как установить параметры сортировки для соединения в SQL Server? - PullRequest
10 голосов
/ 27 августа 2011

Как настроить параметры сортировки, которые 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.я не говорю о сопоставлении по умолчанию, применяемом к серверу, базе данных, таблице или столбцу для столбцов, отличных от Юникода (например, char, varchar, text).я говорю о сопоставлении, используемом SQL Server при сравнении и сортировке строк.


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

См. также

1 гипотетический sql, который показывает проблемы локали

1 Ответ

6 голосов
/ 27 августа 2011

Как прокомментировал marc_s, параметры сортировки - это свойство базы данных или столбца, а не соединения.

Однако вы можете переопределить параметры сортировки на уровне операторов, используя COLLATE Ключевое слово.

Используя ваши примеры:

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

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

Тем не менее, я не могу найти утверждение об использовании COLLATE с именем динамического сопоставления, оставляя в качестве единственного возможного решения динамический SQL и EXEC.См. эту запись в Social.MSDN для примера.

...