web-dev-qa-db-ja.com

ALTER TABLEステートメントがCHECK制約と競合しました

datecomdatelivrより小さいことを確認する必要があります

create table Commande
(
Numcom int identity primary key,
Datecom date,
Datelivr date,
Codecli int foreign key references clients (Codecli) 
)

alter table Commande 
    add constraint date_check check(datediff(day,Datecom,Datelivr) > 0)

しかし、私はエラーメッセージを受け取ります:

ALTER TABLEステートメントがCHECK制約「date_check」と競合しました。データベース "tp4"、テーブル "dbo.Commande"で競合が発生しました。

これはどうして起こりますか?

5
Khalil B

エラーメッセージは自明です:チェック制約はDatecomのすべての値がDatelivrより少なくとも1日早いことを強制しようとしていますが、これが存在する行が少なくとも1つ必要です真ではない-Datecomが同じ日、または後で、または値の1つがNULLである。以下を使用してこれらの行を検索します。

SELECT Numcom, Datecom, Datelivr
FROM dbo.Commade
WHERE datediff(day,Datecom,Datelivr) <= 0
  OR Datecom IS NULL
  OR Datelivr IS NULL;
4
Aaron Bertrand