2015-12-04 249 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(*)來自插入;' - 它是非確定性的 - 一個任意的行將被選中,所有其他的被忽略。你需要重寫你的觸發器來考慮這個問題! –