【问题标题】:Collation Problem整理问题
【发布时间】:2011-08-10 02:46:51
【问题描述】:

我在数据库中的不同对象中得到不同的排序规则...

  • 表的排序规则是“SQL_SwedishStd_Pref_CP1_CI_AS”
  • 存储过程的排序规则是“SQL_Latin1_General_CP1_CI_AS”

在执行查询时会产生问题。 有人可以帮帮我吗?

提前致谢

【问题讨论】:

  • 您遇到了什么问题?您对此有疑问吗?
  • ''无法解决类似操作中“SQL_SwedishStd_Pref_CP1_CI_AS”和“SQL_Latin1_General_CP1_CI_AS”之间的排序规则冲突。'' ..这是我在执行存储过程时收到的错误消息

标签: sql-server sql-server-2008 collation database-schema


【解决方案1】:

您必须根据您希望进行连接(或 where 子句)的排序规则来指定

请参阅下面的示例了解如何编写代码。

create table x( id int, name varchar(256) collate SQL_SwedishStd_Pref_CP1_CI_AS)
create table y( id int, name varchar(256) collate SQL_Latin1_General_CP1_CI_AS)

insert into x values (1, 'Filip')
insert into y values (1, 'Filip')

因此,如果您希望基于 Latin1 排序规则加入,您可以这样编写查询:

select * 
  from x
  join y 
    on x.name collate SQL_Latin1_General_CP1_CI_AS = y.name 

如果您希望根据瑞典排序规则加入,您可以这样编写查询:

select * 
  from x
  join y 
    on x.name = y.name collate SQL_SwedishStd_Pref_CP1_CI_AS 

如果排序规则差异是通过错误定义表造成的,您可以更改列以切换排序规则:

alter table x alter column name varchar(256) collate SQL_Latin1_General_CP1_CI_AS

如果您随后像这样运行查询,则不会再出现错误:

select * 
  from x
  join y 
    on x.name = y.name

【讨论】:

    猜你喜欢
    • 2010-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-28
    • 2018-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多