-1

デザイナーのように、プライマリ列 (nvarchar) が 1 つしかないテーブルがあり、プライマリ キーとしてマークされており、null は許可されていません。しかし、どういうわけか、そのテーブルにはキー値が空の行があり、もちろん null ではなく、主キー列の他の行と重複しておらず、競合や違反は発生していません。

ただし、私の知る限り、そのような値 (空) は SQL Server のプライマリ列には許可されていません。正しく動作させるためにオンにするオプションがあるのだろうか。または、CHECK 制約を使用して値を自分でチェックするか、C# コードで (更新前に) 値をチェックする必要があります。

どうぞよろしくお願いいたします。ありがとう!

4

1 に答える 1

2

「空文字列」は、長さがゼロの文字列です。NOT NULL であるため、null チェックに違反しません。これは、SQL Server の文字ベースの主キー列に許可されている値であることは間違いありません。ビジネスで空の文字列値が許可されていない場合は、チェック制約をビジネス ルールとして実装するのが最善の方法です。そうすれば、ルールを知らない可能性のあるクライアントが違反することはありません。

このコードは SQL Server で違反なく実行されます。念のためテストしました。

create table TestTable (
  myKey varchar(10) primary key,
  myData int
)
GO

insert TestTable
select '', 1
于 2013-04-26T22:26:32.953 に答える