我很确定我做错了什么,因为这是我的第一个检查约束,但我不明白为什么它不起作用。我需要检查日期范围是否重叠。
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 应用于我的表时,它允许插入。它应该失败。
我究竟做错了什么?