Ian*_*oyd 11 sql-server globalization locale sql-server-2005 collation
如何设置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
Run Code Online (Sandbox Code Playgroud)
然后
SELECT * FROM Orders
WHERE CustomerID = 3277
AND ProjectName LIKE '%l''ecole%'
Run Code Online (Sandbox Code Playgroud)
然后
UPDATE Quotes
SET IsCompleted = 1
WHERE QuoteName = 'Cour de l''école'
Run Code Online (Sandbox Code Playgroud)
与此同时,当中国客户连接时:
SET COLLATION_ORDER Chinese_PRC_CI_AI_KS_WS
SELECT TOP 100 FROM Orders
ORDER BY ProjectName
Run Code Online (Sandbox Code Playgroud)
要么
SELECT * FROM Orders
WHERE CustomerID = 3277
AND ProjectName LIKE '??'
Run Code Online (Sandbox Code Playgroud)
要么
UPDATE Quotes
SET IsCompleted = 1
WHERE QuoteName = '?????'
Run Code Online (Sandbox Code Playgroud)
现在我可以改变SELECT系统中的每个语句,以允许我传递校对:
SELECT TOP 100 FROM Orders
WHERE CustomerID = 3278
ORDER BY ProjectName COLLATE French_CI_AS
Run Code Online (Sandbox Code Playgroud)
但是您无法将排序顺序作为参数传递给存储过程:
CREATE PROCEDURE dbo.GetCommonOrders
@CustomerID int, @CollationOrder varchar(50)
AS
SELECT TOP 100 FROM Orders
WHERE CustomerID = @CustomerID
ORDER BY ProjectName COLLATE @CollationOrder
Run Code Online (Sandbox Code Playgroud)
COLLATE在执行a UPDATE或a 时,该条款无法帮助我SELECT.
注意:数据库中的所有字符串列所有已经nchar,nvarchar或ntext.我不是在谈论应用到服务器,数据库,表或列的非Unicode列的默认排序规则(即char,varchar,text).我在谈论SQL Server在比较和排序字符串时使用的排序规则.
如何指定每个连接的排序规则?
1个假设的sql,它表现出语言环境问题
正如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'?????'
Run Code Online (Sandbox Code Playgroud)
尽管如此,我找不到使用带有动态排序规则名称的COLLATE的声明,只留下可能的解决方案动态SQL和EXEC.有关示例,请参阅此social.MSDN条目.
| 归档时间: |
|
| 查看次数: |
16479 次 |
| 最近记录: |