2017-04-24 153 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的排序規則)有所不同。