Как установить параметры сортировки для соединения в 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
, я не говорю о сопоставлении по умолчанию, применяемом к серверу, базе данных, таблице или столбцу для столбцов, отличных от Юникода (т.е. char
, varchar
, text
). я говорю о сопоставлении, используемом SQL Server при сравнении и сортировке строк.
Как указать параметры сопоставления для каждогоподключения?
Смотрите также
- Аналогичный вопрос, но для ADO.net и строк подключения
- Аналогичный вопрос, но для ASP.net MVC2 и MySQL
1 гипотетический sql, который показывает проблемы локали
1 ответ
Как прокомментировал 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 для примера.