これは私の最初のチェック制約であるため、何か間違っていると確信していますが、なぜ機能しないのか理解できません。日付範囲が重複していないことを確認する必要があります。
ALTER FUNCTION fn_DateOverlaps (@StartDate DATE, @EndDate DATE, @ProjectID INT)
RETURNS BIT
AS
BEGIN
DECLARE @Ret BIT
SET @Ret = 1
IF NOT EXISTS(
SELECT * FROM project_sprint
WHERE ((@StartDate >= StartDate AND @EndDate <= EndDate)
OR (@StartDate <= StartDate AND @EndDate >= EndDate))
AND ProjectId = @ProjectId
)
BEGIN
SET @Ret = 0
END
RETURN @Ret
END
GO
次に、これをテーブルに適用します。
ALTER TABLE Project_Sprint WITH CHECK ADD CONSTRAINT ck_DateOverlaps CHECK (dbo.fn_DateOverlaps([StartDate], [EndDate], [ProjectId])=1)
GO
関数をテストすると、良い結果が得られます。
SELECT dbo.fn_DateOverlaps('2013-06-10', '2013-06-13', 1)
しかし、同じ日付範囲とプロジェクト ID をテーブルに適用すると、挿入が許可されます。失敗するはずです。
私は何を間違っていますか?