整理问题

时间:2011-04-21 07:55:07

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

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

  • 表的整理是'SQL_SwedishStd_Pref_CP1_CI_AS'
  • 存储过程的整理是'SQL_Latin1_General_CP1_CI_AS'

执行查询时出现问题。 有人可以帮助我吗?

提前致谢

1 个答案:

答案 0 :(得分:3)

您必须根据您希望进行连接(或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