首页 > 解决方案 > 如何限制在 SQL Server 中的表中插入特定行数

问题描述

如何限制在 SQL Server 的表中插入特定行数?

我为学生开发了一个在线课程注册系统,学生可以为他们选择课程预留座位。

每门课程都有部分,每个部分都有有限的座位容量 30/35 或Section表中定义的 40。

问题是当学生同时争夺最后一个座位时,它会超出座位容量。因此,我在表上创建了一个触发器,以根据部分表中定义的座位容量来处理行数条目。

这是绝对正确的。但是对于触发器,我的 Web 应用程序变得非常慢。我现在不想要触发器。我需要另一个重复的解决方案来处理座位容量超出问题。

您能否在不实施触发器的情况下提出一个好的解决方案?

我的表结构和触发器如下所示:

表和触发器的图像

标签: sql-serverdatabase-trigger

解决方案


在插入数据之前使用存储过程插入数据签入索引表,如果行更多,则返回 1 为真,返回 0 为假,并在前面给出一条消息不要引发需要更多时间执行的错误

IF (SELECT Count(p.rows) AS [Row Count]
    FROM sys.partitions p
    INNER JOIN sys.indexes i ON p.object_id = i.object_id
                             AND p.index_id = i.index_id
    WHERE i.type_desc = 'CLUSTERED'
    and p.object_id = object_id('table'))>40
Begin 
 insert into table 
 select 1 
end 
else 
 select 0 

推荐阅读