2017-04-24 87 views
0

我在数据库中创建了2个视图。两者都有SQL_Latin1_General_CP1_CI_AS的排序规则。视图1正在使用相同的排序规则查询数据库中的数据。视图2使用排序的Latin1_General_CI_AS从数据库查询数据。虽然视图显示相同的排序规则我运行到当我运行下面的查询的问题:排序问题与视图

Select 
    V1.ID, 
    V1.Amount 
From V1 
Where V1.ID NOT IN 
    (Select V2.ID 
    From V2) 

这将返回以下错误:

Cannot resolve the collation conflict between "Latin1_General_CI_AS" and "SQL_Latin1_General_CP1_CI_AS" in the equal to operation.

我已经尝试添加“分页SQL_Latin1_General_CP1_CI_AS“添加到Where语句的末尾,但未成功。我也尝试在select语句的字段级别更改排序规则,但没有成功。

如何将此数据与不匹配的排序规则进行比较?

谢谢。

回答

0

只需添加任何地方你的数据库之间比较字符串明确的整理,就像这样:

Select 
    V1.ID, 
    V1.Amount 
From V1 
Where V1.ID COLLATE DATABASE_DEFAULT NOT IN 
    (Select V2.ID COLLATE DATABASE_DEFAULT 
    From V2) 

的“DATABASE_DEFAULT”基本上会投的字符串你从运行视图中的数据库的排序规则。两个排序规则都会匹配,并且比较成功无误。

请注意,同样的技术对于声明临时表varchar和nvarchar列以及与临时表进行连接很有用,其中数据库的排序规则可能与已安装的SQL Server的排序规则(以及tempdb的排序规则)有所不同。