2015-04-28 49 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子句继承当前数据库的排序规则

相关问题