首页 > 解决方案 > 有排序规则问题的 SQL 查询

问题描述

我正在尝试比较来自测试实例和实时实例的视图的数据结果。两个实例都在同一台服务器上。

我已经在它们之间创建了一个链接,因此我可以在它们之间进行查询,但是我收到一个排序规则错误 - 无法解决 EXCEPT 操作中“SQL_Latin1_General_CP1_CI_AS”和“Latin1_General_CI_AI”之间的排序规则冲突。

我正在尝试使用此查询来比较结果,因为它们应该是两个实例的相同结果:

     SELECT * FROM (SELECT * FROM 
     INSTANCE1.dbo.View1) as TEST
     EXCEPT
     SELECT * FROM (SELECT * FROM 
     [SERVER\INSTANCE2].Database.dbo.View1) as LIVE

我试图将查询包装在 CTE 中,并且还一直在尝试指定默认排序规则,但我尝试的一切都不起作用。

有没有办法可以在单独的实例上查询这两个视图来比较结果而不创建临时表并让 SQL 忽略冲突?

非常感谢你,我很感激任何帮助。

标签: sql-servertsql

解决方案


好吧,错误消息会告诉您确切的问题是什么,但不是它属于哪一列或哪一列,并且因为您使用select *我也不知道列名是什么。您将需要识别那些存储字符串的表中的列,然后强制使用相同的排序规则,我认为是这样的(未经测试):

SELECT stringcol 
FROM (
     SELECT stringcol collate  SQL_Latin1_General_CP1_CI_AS 
     FROM INSTANCE1.dbo.View1) as TEST
EXCEPT
SELECT stringcol 
FROM (SELECT stringcol collate  SQL_Latin1_General_CP1_CI_AS 
      FROM [SERVER\INSTANCE2].Database.dbo.View1
     ) as LIVE

因此,您需要指定列,还需要指定用于字符串列的排序规则。


推荐阅读