即使在修复整理后,“也无法解决整理冲突”

时间:2015-04-25 20:11:51

标签: sql-server

我正在使用“PrimaryDatabase”的当前数据库具有排序“SQL_Latin1_General_CP1_CI_AS”,而我尝试访问的“SecondaryDatabase”具有排序“Arabic_CI_AS

我更改了SecondaryDatabase的排序规则并将其设置为“SQL_Latin1_General_CP1_CI_AS”,并确保它已在表格中进行了更改。

但是,当我运行下面的查询时,我仍然会收到整理冲突。

select * from [MYSERVER].[SecondaryDatabase].[dbo].[SecondaryTableName] 
where ltrim(rtrim([SecondaryTablename])) not in (select ltrim(rtrim(PrimaryFieldname))  from PrimaryTablename where PrimaryFieldName2=1)

1 个答案:

答案 0 :(得分:2)

使查询起作用的一种方法是使用COLLATE子句,以便对WHERE子句的谓词中涉及的两个字段应用排序规则:

select * 
from [MYSERVER].[SecondaryDatabase].[dbo].[SecondaryTableName] 
where ltrim(rtrim([SecondaryFieldname])) COLLATE SQL_Latin1_General_CP1_CI_AS
      not in (select ltrim(rtrim(PrimaryFieldname)) COLLATE SQL_Latin1_General_CP1_CI_AS 
              from PrimaryTablename 
              where PrimaryFieldName2 = 1)

可能不需要应用于COLLATE的{​​{1}}子句,因为这是相应数据库的默认排序规则(因此PrimaryFieldname可能已经有此排序规则)。

另一种解决方案是在字段级别更改排序规则,例如:

PrimaryFieldname