【问题标题】:SQL Server 2008 Collation conflict - how to resolve?SQL Server 2008 排序规则冲突 - 如何解决?
【发布时间】:2014-01-29 13:57:36
【问题描述】:

为了简化,POC,我有以下查询,使用字符类型的列:

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

我收到以下错误:

消息 468,第 16 级,状态 9,第 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

所有迹象都表明GGIMAIN 和GGI2014 都经过整理Latin1_General_CS_AS。

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

谢谢,

马特

【问题讨论】:

  • 嗨 marc_s。你能解释一下你为什么编辑我的帖子吗?

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


【解决方案1】:
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

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

【讨论】:

  • 请注意,如果select语句中有AS关键字,则COLLATE在它之前。
  • @SteveTaylor 非常感谢,这救了我很多
【解决方案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

【讨论】:

    【解决方案3】:

    我为查询的每个字段添加一个整理

    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 在给出错误的查询中

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

    【讨论】:

      猜你喜欢
      • 2016-01-04
      • 2021-04-13
      • 2011-05-06
      • 1970-01-01
      • 2010-10-07
      • 2012-01-21
      • 2011-03-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多