Sql server 视图的排序问题

Sql server 视图的排序问题,sql-server,sql-server-2012,Sql Server,Sql Server 2012,我在一个数据库中创建了两个视图。两者都有一个SQL拉丁通用CP1 CI AS的排序规则。视图1正在查询具有相同排序规则的数据库中的数据。视图2使用Latin1\u General\u CI\u AS排序规则从数据库查询数据。即使视图显示相同的排序规则,我在运行以下查询时也遇到了问题: Select V1.ID, V1.Amount From V1 Where V1.ID NOT IN (Select V2.ID From V2) 这将返回以下错误: 无法解决“Lat

我在一个数据库中创建了两个视图。两者都有一个SQL拉丁通用CP1 CI AS的排序规则。视图1正在查询具有相同排序规则的数据库中的数据。视图2使用Latin1\u General\u CI\u AS排序规则从数据库查询数据。即使视图显示相同的排序规则,我在运行以下查询时也遇到了问题:

Select
  V1.ID,
  V1.Amount
From V1
Where V1.ID NOT IN 
    (Select V2.ID
     From V2)
这将返回以下错误:

无法解决“Latin1\u General\u CI\u AS”之间的排序规则冲突 和“SQL拉丁通用CP1 CI_AS”中的“等于”运算

我试图在Where语句的末尾添加“COLLATE SQL\u Latin1\u General\u CP1\u CI\u AS”,但没有成功。我还尝试在select语句的字段级别更改排序规则,但没有成功

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


谢谢。

只要在数据库之间比较字符串的地方添加一个显式排序规则,如下所示:

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的排序规则)