[解決済み] NULLも許容するユニークな制約を作成するにはどうしたらいいですか?
2022-03-14 03:05:24
質問
GUIDを入力するカラムに一意制約を設定したい。しかし、私のデータにはこのカラムのNULL値が含まれています。複数のNULL値を許容する制約を作成するにはどうすればよいですか?
以下は シナリオの例 . このスキーマを考えてみましょう。
CREATE TABLE People (
Id INT CONSTRAINT PK_MyTable PRIMARY KEY IDENTITY,
Name NVARCHAR(250) NOT NULL,
LibraryCardId UNIQUEIDENTIFIER NULL,
CONSTRAINT UQ_People_LibraryCardId UNIQUE (LibraryCardId)
)
次に、私が実現しようとしていることについては、このコードをご覧ください。
-- This works fine:
INSERT INTO People (Name, LibraryCardId)
VALUES ('John Doe', 'AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA');
-- This also works fine, obviously:
INSERT INTO People (Name, LibraryCardId)
VALUES ('Marie Doe', 'BBBBBBBB-BBBB-BBBB-BBBB-BBBBBBBBBBBB');
-- This would *correctly* fail:
--INSERT INTO People (Name, LibraryCardId)
--VALUES ('John Doe the Second', 'AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA');
-- This works fine this one first time:
INSERT INTO People (Name, LibraryCardId)
VALUES ('Richard Roe', NULL);
-- THE PROBLEM: This fails even though I'd like to be able to do this:
INSERT INTO People (Name, LibraryCardId)
VALUES ('Marcus Roe', NULL);
最後の文はメッセージ付きで失敗します。
UNIQUE KEY 制約 'UQ_People_LibraryCardId' に違反しました。オブジェクト 'dbo.People' に重複するキーを挿入できません。
どうすればスキーマや一意性制約を変更して、複数の
NULL
の値で、実際のデータで一意性のチェックを行うことができますか?
どのように解決するのですか?
SQL Server 2008 +(英語版
複数のNULLを受け入れるユニークなインデックスを作成するには
WHERE
節があります。を参照してください。
回答は以下の通りです。
.
SQL Server 2008 より前のバージョン
UNIQUE制約を作成し、NULLを許可することはできません。NEWID() のデフォルト値を設定する必要があります。
UNIQUE制約を作成する前に、既存の値をNULLのNEWID()に更新してください。
関連
-
[解決済み】PRIMARY KEY制約に違反しました。オブジェクトに重複したキーを挿入できない
-
[解決済み] TABLOCKとTABLOCKXの比較
-
[解決済み] Sqlサーバーに制約が存在するかどうかを確認する方法は?
-
[解決済み] SQL Server : ログインに成功しましたが、「データベース [dbName] にアクセスできません。(ObjectExplorer) "と表示されました。
-
[解決済み] データセットに対するSSRSクエリの実行に失敗しました
-
[解決済み] あるテーブルから、別のテーブルに存在しないすべてのレコードを選択するにはどうすればよいですか?
-
[解決済み] シンプルに保つ、クエリで複数のCTEを行う方法
-
[解決済み] SQL Serverでdatetimeを切り捨てるにはどうすればよいですか?
-
[解決済み] SQL ServerでGROUP BYと一緒にDISTINCTを使用する
-
[解決済み] SQLテーブルのレコードをコピーして、新しい行のユニークIDを交換するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 「ストアドプロシージャが見つかりませんでした
-
[解決済み] SQL Serverでシングルクォートを置換する
-
[解決済み] データ損失の可能性があるため、スキーマの更新を終了します。
-
[解決済み] SQL Server : ログインに成功しましたが、「データベース [dbName] にアクセスできません。(ObjectExplorer) "と表示されました。
-
[解決済み] SQLでテーブルの行数を数える
-
[解決済み] SQL Serverのタイムスタンプ列をdatetime形式に変換する方法
-
[解決済み] SQL Server Management StudioでIntelliSenseが機能しない
-
[解決済み] SQL ServerでGROUP BYと一緒にDISTINCTを使用する
-
[解決済み] SQL Server リンクサーバーのクエリ例
-
[解決済み] MySQL は一意性制約の NULL 値を無視しますか?