2015-12-04 242 views
0

我试图创建一个触发器,创建一条声明“超出了该值”的声明,并且不允许该人员在课程中允许的人数超过最大占用率时注册入课程。我现在被困住了,并且对如何形成触发器有点困惑。这是我到目前为止有:SQL Server触发器

Create Trigger Overflow_Occupancy 
    ON CourseCatalog 
    For UPDATE 
    AS 
    IF TotalOccupancy > MaxOccupancy 

感谢您的帮助!

+0

首先编写一个简单的'SELECT'查询,它将为您提供执行检查所需的信息。然后从该查询开始,编写触发器并查找“RAISERROR”。 – ForguesR

回答

-1
Create Trigger Overflow_Occupancy 
ON CourseCatalog 
after insert 
AS 

declare @TotalOccupancy integer; 
declare @MaxOccupancy integer; 

set @MaxOccupancy =100; 
select @TotalOccupancy= count(*) from CourseCatalog; 



IF @TotalOccupancy > @MaxOccupancy 
delete from CourseCatalog where [email protected] ; 
+1

你的触发器有** MAJOR **缺陷,因为你似乎认为它会被称为每行** ** - 这是**不是**的情况。触发器将在每个语句**中触发一次**,因此如果您的INSERT语句影响25行,您将触发**触发一次**,但是“插入”表格将包含25行。您的代码在这25行中选择哪一个? 'select @ TotalOccupancy = count(*)来自插入;' - 它是非确定性的 - 一个任意的行将被选中,所有其他的被忽略。你需要重写你的触发器来考虑这个问题! –