2016-12-08 37 views
0

我理解觸發器的想法,但對如何使用它來施加約束有點困惑。例如,我有兩個表格:一個student表格和一個book_order表格,顯示學生訂購的書籍。使用SQL Server觸發器施加約束

我想創建一個觸發器,它將檢查具有圖書訂單的學生無法從學生表中刪除。

+0

作爲替代,你應該使用外鍵約束'book_order'表,引用'student'表,因爲我不認爲你需要觸發這個場景。 –

+1

問題是爲什麼使用觸發器而不是外鍵? –

+1

外鍵約束不僅僅是一個「替代」。這是表達這種情況的正確方法。你不應該爲此使用觸發器。你不應該學習爲此使用觸發器。 –

回答

0

不知道爲什麼你會永遠這樣做,除非你想寫日誌或什麼時候發生的,但是.....

create TRIGGER Del_Student 
ON dbo.Student 
INSTEAD OF DELETE 
AS 
BEGIN 
    Declare @cnt int 
    Select @cnt = count(*) from deleted d 
    Inner Join BookOrders o on d.studentId = o.studentId 
    if (@cnt > 0) 
    BEGIN 
     RAISERROR ('Deletions not allowed from this table when bookorders exist for student)',  16, 1) 
    END 
END 
+0

謝謝。我收到錯誤消息說:創建觸發器必須是批處理中唯一的語句,「@declare」附近的語法不正確以及附近的語法不正確(最後一個)結束 – jasmine

+0

對不起,已編輯。現在試試。 –

+0

謝謝!正是我在找什麼! – jasmine