Sql Server - 使用排序规则
Posted
技术标签:
【中文标题】Sql Server - 使用排序规则【英文标题】:Sql Server - Using Collation 【发布时间】:2012-06-08 11:03:48 【问题描述】:我正在使用以下查询,我需要在其中指定排序规则提示以避免跨数据库的排序规则问题,因为此查询使用来自 2 个数据库的表。
消息 468,级别 16,状态 9,第 12 行无法解析排序规则 “Latin1_General_CS_AI”和“Latin1_General_CS_AS”之间的冲突 等于运算。
目前,当我运行一些使用具有不同排序规则的不同数据库的查询时,出现排序规则冲突的错误:
Delete from table1 where oldcolumn in
(
select newcolumn from Database2.dbo.table2
where invoiceid = @invno
and complete = 0
)
我将查询更改为包含如下排序提示:
Delete from table1 where oldcolumn COLLATE SQL_Latin1_General_CP1_CS_AS in
(
select newcolumn from Database2.dbo.table2
where invoiceid = @invno
and complete = 0
)
-
以上查询能解决排序问题吗?
在运算符(例如“=”运算符)的左侧或右侧指定整理提示是否相同?
像
invoiceid = @invno
这样的查询是否会产生运行时排序冲突?
注意:我问这个问题是因为我无权访问上述 2 个数据库中的任何一个,并且脚本将在实际数据库上运行。
【问题讨论】:
您忘记描述您现在遇到的“排序规则问题”。您收到错误消息、错误结果还是什么? 我收到排序规则冲突的运行时错误。我已经更新了问题。 你忘记发布错误信息了。 哪个列有哪个排序规则?当newcolumn = 'résumé'
从table2
返回时,是否需要删除oldcolumn = 'resume'
,反之亦然?
请不要随心所欲。我现在只关心运行时错误。
【参考方案1】:
使用下面的查询:
DELETE FROM Table1
WHERE Table1.ID IN (
SELECT Table1.ID
FROM Table1
INNER JOIN Database2.dbo.Table2 Table2 ON Table2.NewColumn = Table1.OldColumn COLLATE SQL_Latin1_General_CP1_CS_AS
WHERE Table2.invoiceid = @invno
AND Table2.complete = 0
)
【讨论】:
以上是关于Sql Server - 使用排序规则的主要内容,如果未能解决你的问题,请参考以下文章