特定Unicode字符的更新失败

时间:2016-10-27 08:58:59

标签: sql-server tsql unicode sql-server-2012

我是一名SQL Server DBA,我得到一个非常奇怪的抱怨:UPDATE语句失败。

create table #temp(id int, c nvarchar(10))
alter table #temp add constraint check_empty check (isnull(c,'')<>'')

insert into #temp values(1,N'ABC') --Success

update #temp set c=N'䬠䏊' where id=1 --Fail
update #temp set c=N'䬠䏊.' where id=1 --Success

insert into #temp values(2,N'䬠䏊') --Fail
insert into #temp values(2,N'䬠䏊.') --Success

我有一个包含NVARCHAR列的表格,我对该列也有一个CHECK约束。当我通过将.附加到字符串来更新相同内容时,它会成功。我试过谷歌搜索,但没有找到任何相关的。

提前致谢!

1 个答案:

答案 0 :(得分:0)

正如这篇帖子所说Link,这是由整理问题引起的,你可以做的是设置整理,就像SQL Server PM说的那样:

  

如果您对大多数语言环境使用默认排序规则(SQL_Latin1_general_CP1_CI_AS),您实际看到的行为实际上是按设计进行的。

     

通常,我建议在实例或数据库级别使用Windows排序规则,例如Latin1_general_100_CI_AS_KS_WS。

并更改您的代码:

alter table #temp add constraint check_empty check (isnull(c,'')<>'')

为:

alter table #temp add constraint check_empty check (isnull(c,'') collate Latin1_general_100_CI_AS_KS_WS <>'')