我想写一个预订系统。 在样本中它有2个表:
_Classes: C_ID,C_title,C_quantity
_Persons: P_ID,P_Name,Class_ID
保留应该继续,直到一个类的_persons等于C_quantity。
我的问题是在将新人插入课程时检查容量可用性的最佳方法? 是否有可能在繁忙的系统中发生并行注册?
存储程序?触发?反式? 什么是最正确的想法?
(C#,SQL server)
答案 0 :(得分:1)
我会说所有解决方案都有效。如果可以使用存储过程,那将是我认为最好的方法。它可以使用触发器,但是很难获得良好的错误处理。
不需要交易,因为您可以加入并获得一个查询。
有一个带有temptable的例子,你可以在最大值之前插入新行。如果你在proc或sql语句中这样做并不重要,但我认为使用trad EF会很难。
create table #tmp
(
id int identity(1,1),
data int
)
-- call many times
declare @result table (id int )
insert into #tmp
output Inserted.id into @result
select a.* from
(select 1 data ) a
inner join (select count(*) cnt from #tmp ) c on c.cnt < 5
-- to get the new row id ( null/empty if full)
select id from @result