SQL Server 2008排序规则冲突 - 如何解决?

时间:2014-01-29 13:57:37

标签: sql sql-server sql-server-2008

为简化POC,我使用字符类型列进行以下查询:

select AH_NAME1 from GGIMAIN.SYSADM.BW_AUFTR_KOPF
union
select AH_NAME1 from GGI2014.SYSADM.BW_AUFTR_KOPF

我收到以下错误:

  

Msg 468,Level 16,State 9,Line 2
  无法解决UNION操作中“SQL_Latin1_General_CP1_CI_AS”和“Latin1_General_CS_AS”之间的排序规则冲突。

确实使用排序规则GGI2014创建了

SQL_Latin1_General_CP1_CI_AS。这已在SMS中更改,实例已重新启动,也在SMS中。

当我查看短信,以及查询时:

select name, collation_name from sys.databases

所有迹象都表明,GGIMAINGGI2014都会被整理{{​​1}}。

有没有人对还有什么需要做什么有任何建议?

谢谢,

马特

3 个答案:

答案 0 :(得分:17)

select AH_NAME1 COLLATE DATABASE_DEFAULT from GGIMAIN.SYSADM.BW_AUFTR_KOPF
union
select AH_NAME1 COLLATE DATABASE_DEFAULT from GGI2014.SYSADM.BW_AUFTR_KOPF

除非我弄错了,否则更改数据库的排序规则不会更改已存在对象的排序规则。只有新对象会受到影响

答案 1 :(得分:2)

尝试这个(也许你的列有不同的排序规则) -

SELECT AH_NAME1 COLLATE database_default
FROM GGIMAIN.SYSADM.BW_AUFTR_KOPF

UNION

SELECT AH_NAME1 COLLATE database_default
FROM GGI2014.SYSADM.BW_AUFTR_KOPF

答案 2 :(得分:0)

我为查询的每个字段添加了一个分页

SELECT Field1 collate default_database
,field2 collate default_database
,fieldn collate default_database
From DB1.dbo.table_x
UNION ALL
SELECT Field1 collate default_database
,field2 collate default_database
,fieldn collate default_database
From DB2.dbo.table_y

PD.only在查询中提供错误

我希望它有效,我让它们摆脱了麻烦