2015-04-28 50 views
2

我有一個帶有except子句的查詢。除了except外,我的第二個查詢來自與第一個查詢使用的數據庫不同的數據庫。如何在多個數據庫中使用EXCEPT子句

它看起來是這樣的

SELECT field1 as a 
FROM table 1 
EXCEPT 
USE differentdb 
SELECT field2 as a 
FROM table 2 

我也試過這種

SELECT field1 as a 
FROM table 1 
EXCEPT 
USE differentdb 
SELECT field2 as a 
FROM differentdb.dbo.table2 

我知道這是不是在SQL不允許的,因爲我得到以下錯誤:

Msg 468, Level 16, State 9, Line 1 Cannot resolve the collation conflict between "SQL_Latin1_General_CP1_CI_AS" and "Latin1_General_CI_AS" in the equal to operation.

我想知道是否有另一種方式來寫這個查詢,並完成一個跨數據庫EXCEPT子句。

+0

可能重複[如何擺脫對SQL Server視圖的排序規則衝突的?] (http://stackoverflow.com/questions/20544392/how-to-get-rid-of-collat​​ion-conflict-for-sql-server-view) –

回答

2

改變列的像飛的歸類:

SELECT field1 COLLATE SQL_Latin1_General_CP1_CI_AS as a 
FROM table 1 
EXCEPT 
SELECT differentdb.SchemaName.field2 as a 
FROM table 2 
1

我們可以使用collate子句整理從其他數據庫轉換。

SELECT field2 collate SQL_Latin1_General_CP1_CI_AS as a 
FROM table 2 

這裏你應該用正確的排序規則 - 因爲它沒有足夠的信息你是什麼第一和第二數據庫的排序規則。

或者你可以簡單地使用

SELECT field2 collate database_default as a 
FROM table 2 

這將導致collate子句繼承當前數據庫的排序規則

相關問題