联合选择无法解决排序规则冲突

use*_*618 10 sql sql-server-2005

我有两个问题:

首先不起作用:

select hotels.TargetCode as TargetCode from hotels
union all 
select DuplicatedObjects.duplicatetargetCode as TargetCode 
from DuplicatedObjects where DuplicatedObjects.objectType=4
Run Code Online (Sandbox Code Playgroud)

因为我收到错误:

Cannot resolve collation conflict for column 1 in SELECT statement.
Run Code Online (Sandbox Code Playgroud)

第二部作品:

select hotels.Code from hotels where hotels.targetcode is not null 
union all 
select DuplicatedObjects.duplicatetargetCode as Code 
from DuplicatedObjects where DuplicatedObjects.objectType=4 
Run Code Online (Sandbox Code Playgroud)

结构体:

Hotels.Code -PK nvarchar(40)
Hotels.TargetCode - nvarchar(100)

DuplicatedObjects.duplicatetargetCode PK nvarchar(100)
Run Code Online (Sandbox Code Playgroud)

小智 16

您还需要collation在select部分中添加语句 - 不仅在where子句中 - 如下所示:

select a.field1 collate DATABASE_DEFAULT, b.otherfield from table1 a, table2 b 
where a.field1 collate DATABASE_DEFAULT = b.field3
Run Code Online (Sandbox Code Playgroud)


Joe*_*win 9

sp_help在两个表上使用.hotels.TargetCode上的排序规则与排序规则不同DuplicatedObjects.duplicateTargetCode,因此DB不知道如何处理结果UNION.

您可以在其中一个上强制执行新的排序规则以匹配另一个,或将结果放入预定义的临时表/表中,该表将已定义排序规则.

编辑:您可以使用类似的东西覆盖现有的排序规则

DuplicatedObjects.duplicateTargetCode COLLATE SQL_Latin1_General_CP1_CI_AS
Run Code Online (Sandbox Code Playgroud)

...在查询中.这将使用duplicateTargetCode和排序规则SQL_Latin1_General_CP1_CI_AS.您应该选择与其匹配的排序规则hotels.TargetCode.