2016-10-27 6 views
1

Ich bin ein SQL Server DBA und ich habe eine sehr seltsame Beschwerde, dass eine UPDATE-Anweisung fehlschlägt.Update fehlgeschlagen für ein bestimmtes Unicode-Zeichen

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 

Ich habe eine Tabelle mit einer Spalte NVARCHAR und ich habe auch eine CHECK Einschränkung für diese Spalte. Wenn ich dasselbe durch Anhängen von . an die Zeichenfolge aktualisiere, ist es erfolgreich. Ich habe versucht, das zu googeln, habe aber nichts Relevantes gefunden.

Vielen Dank im Voraus!

Antwort

0

Wie dieser Beitrag sagte Link, wird dies durch Sortierungs Problem verursacht wurde, was Sie gesagt haben die Sortierung wie der SQL Server-PM wird tun können:

Das Verhalten, das Sie sehen, sind in der Tat durch Design, wenn Sie ist verwenden die Standardsortierung für die meisten Ländereinstellungen (SQL_Latin1_general_CP1_CI_AS).

Im Allgemeinen würde ich eine Windows-Kollatierung auf Instanz- oder Datenbankebene empfehlen, z. B. Latin1_general_100_CI_AS_KS_WS.

und Ihren Code ändern aus:

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

zu:

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

Perfect !!! Ich danke dir sehr.. :) :) –

Verwandte Themen