我有里程表格:
一个简单的表格:
LogID, Start, End
我想阻止用户输入与现有开始/结束对冲突的开始/结束对。只是有一些数学上的脑阻塞,可能是一个真正简单的解决方案。
例如:
IF EXISTS(SELECT 1 FROM Log WHERE (@Start + 1) BETWEEN [Start] AND [End]
BEGIN
-- throw error
END
-- I'll combine these two after I figure out my issue
IF EXISTS(SELECT 1 FROM Log WHERE (@OdometerEnd -1) BETWEEN [Start] AND [End]
BEGIN
-- throw error
END
这适用于以下值,只要我向前移动并且带有日志的人以正确的顺序输入它们,例如以下值:
Start: 50
End: 100
Start: 100
End: 150
Start: 150
End: 200
但是,如果有跳跃,例如:
Start: 50
End: 100
Start: 101 <-- here
End: 150
-- I want to allow the following record to be created
Start: 100
End: 101
我想我已经看过很多次了。如果我缺少一些简单的数学,我会很高兴对此感到愚蠢。
修改
这是我不想发生的事情的视觉表现:
[----------]
[-----------]
[--------] <-- clash
上面我的示例会停止此操作,除非它按顺序输入,我需要允许:
[----------]
[-----------]
[-----------]
[----] <-- need to allow
答案 0 :(得分:1)
如何将WHERE子句更改为:
WHERE @end > [Start]
AND @start < [End]
答案 1 :(得分:0)
到目前为止,这是有效的:
IF EXISTS(SELECT 1 FROM Log WHERE ((@Start + 1) <= [End] AND (@End - 1) >= Start))
BEGIN
-- Error out...
END
有人能发现问题吗?仍在锤击。为什么这是如此精神混乱,我不知道。