我正在使用下面的查询,我需要在其中指定排序规则提示以避免跨数据库的排序规则问题,因为此查询使用来自 2 个数据库的表。
Msg 468, Level 16, State 9, Line 12 Cannot resolve the collation conflict between "Latin1_General_CS_AI" and "Latin1_General_CS_AS" in the equal to operation.
目前,当我运行一些使用具有不同排序规则的不同数据库的查询时,我遇到排序规则冲突的错误:
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 个数据库中的任何一个,脚本将在实际数据库上运行。
最佳答案
使用下面的查询:
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 - SQL Server - 使用排序规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10880200/