我正在尝试阻止预订系统中的双重预订,C#到SQL Server。
我正在使用存储过程并尝试过:
alter proc Datumkoll
@DatumFrom smalldatetime = null,
@datumTill smalldatetime = null
as
select RumsNummer
from rum
where
RumsNummer not in (select rumsnummer
from rumsbokning
where datumfrån >= @datumfrom and datumtill <= @datumTill)
GO
如果日期是在现有预订中设置的话,此代码不会阻止双重预订
答案 0 :(得分:2)
说明时间窗口和选项:
非重叠:
[new]
[existing]
部分重叠:
[new] [new]
[existing] [existing]
遏制:
[new] [-------new---------]
[existing] [existing]
您的支票仅处理最后一项;你需要回去考虑其他人。诀窍是实际上只需要3个测试:
给了我们:
where (datumfrån>=@datumfrom and datumtill <= @datumTill)
or (@datumfrom >= datumfrån and @datumfrom <= datumtill)
or (@datumTill >= datumfrån and @datumfrom <= datumtill)
(另见替代结构的评论)
答案 1 :(得分:0)
select R.RumsNummer
from rum R
where not exists (
select RB.rumsnummer
from rumsbokning RB
where
R.RumId = RB.RumId
and RB.datumfrån >= @datumfrom
and RB.datumtill <= @datumTill )
无论如何,您应该在保存新预订时再次执行此检查。
答案 2 :(得分:0)
尝试
Select rumsnummer
from rumsbokning
where datumfrån <= @datumTill and datumtill >= @datumfrom