我有两个问题:
首先不起作用:
select hotels.TargetCode as TargetCode from hotels
union all
select DuplicatedObjects.duplicatetargetCode as TargetCode
from DuplicatedObjects where DuplicatedObjects.objectType=4
因为我收到错误:
Cannot resolve collation conflict for column 1 in SELECT statement.
第二部作品:
select hotels.Code from hotels where hotels.targetcode is not null
union all
select DuplicatedObjects.duplicatetargetCode as Code
from DuplicatedObjects where DuplicatedObjects.objectType=4
结构:
Hotels.Code -PK nvarchar(40)
Hotels.TargetCode - nvarchar(100)
DuplicatedObjects.duplicatetargetCode PK nvarchar(100)
答案 0 :(得分:16)
您还需要在select部分中添加collation
语句 - 不仅在where子句中 - 如下所示:
select a.field1 collate DATABASE_DEFAULT, b.otherfield from table1 a, table2 b
where a.field1 collate DATABASE_DEFAULT = b.field3
答案 1 :(得分:9)
在两个表上使用sp_help
。 hotels.TargetCode上的排序规则与DuplicatedObjects.duplicateTargetCode
上的排序规则不同,因此数据库不知道如何处理结果UNION
。
您可以在其中一个上强制执行新的排序规则以匹配另一个排序规则,或将结果放入预定义的临时表/表中,该表将定义一个排序规则。
编辑:您可以使用类似......
之类的内容覆盖现有的排序规则DuplicatedObjects.duplicateTargetCode COLLATE SQL_Latin1_General_CP1_CI_AS
...在查询中。这将使用duplicateTargetCode和排序规则SQL_Latin1_General_CP1_CI_AS
。您应该选择与hotels.TargetCode
匹配的排序规则。
答案 2 :(得分:2)
即使您的语法正确,尝试在加入链接服务器时在查询中设置排序规则仍然可能会失败Incorrect syntax near 'COLLATE'
。
解决方案:在“链接服务器属性”中,将Use Remote Collation
设置为False,然后在Collation Name
中输入所需的排序规则类型 - 删除需要在查询中强制排序规则。
答案 3 :(得分:0)
如果将临时表#list声明为
,则排序规则冲突可能会消失 CREATE TABLE #list
(
record_num INT IDENTITY(1,1),
TempAcctNum NVARCHAR(40) Collate Database_Default,
TempAcctName NVARCHAR(100) Collate Database_Default,
TempNumOfCrds SMALLINT,
TempSys2Acct NVARCHAR(10) Collate Database_Default,
TempDelType TINYINT,
TempStatusOfCrd VARCHAR(100) Collate Database_Default,
TempLastDate VARCHAR(100) Collate Database_Default,
TempSys2Acct1 NVARCHAR(10) Collate Database_Default,
TempShrtName NVARCHAR(50) Collate Database_Default,
TempAdd1 NVARCHAR(200) Collate Database_Default,
TempAdd2 NVARCHAR(200) Collate Database_Default,
TempCity NVARCHAR(100) Collate Database_Default,
TempState NVARCHAR(100) Collate Database_Default,
TempZipCode NVARCHAR(50) Collate Database_Default,
TempOpenDate DATETIME,
TempFax NVARCHAR(50) Collate Database_Default,
TempUsr1 NVARCHAR(100) Collate Database_Default,
TempUsr2 NVARCHAR(100) Collate Database_Default,
TempUsr3 NVARCHAR(100) Collate Database_Default,
TempUsr4 NVARCHAR(100) Collate Database_Default,
TempMemo NTEXT,
TempMail NVARCHAR(100) Collate Database_Default,
TempNoSys2Status NVARCHAR(50) Collate Database_Default,
TempDelete BIT,
TempEdit BIT,
TempContName VARCHAR(200) Collate Database_Default,
TempPhone NVARCHAR(50) Collate Database_Default
)