我是一名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
约束。当我通过将.
附加到字符串来更新相同内容时,它会成功。我试过谷歌搜索,但没有找到任何相关的。
提前致谢!
答案 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 <>'')