我需要建立在SQL Server是有條件解僱當用戶試圖刪除在表中的行觸發。SQL Server觸發器:如何獲取觸發器的where子句中的查詢字符串中使用的值?
我在數據庫Airlines
2個表:
Passenger
- 它有乘客的信息。我需要在這個表上創建觸發器,顯然Record
- 它記錄了飛行(S)的乘客已經上
我的觸發應該工作如下:
如果乘客從來沒有上過航班,如果嘗試過,它應該被刪除。 但是,如果他/她有不是在航班上,它應該限制行動並打印他在任何航班上的次數。
的唯一的事情(我希望)我與掙扎是:
我怎麼會指定查詢內的任何WHERE
條款的觸發,如果我不知道我需要尋找,直到用戶其特定的乘客試圖刪除它?
那麼,長話短說:有沒有什麼辦法可以獲得在查詢的WHERE
子句中傳遞的值,以便在觸發器中使用?
非常感謝您的時間!
這裏是我的代碼:
ALTER TRIGGER Restrict_Delete
ON Records
INSTEAD OF DELETE
AS
BEGIN
DECLARE @r_count INT
SET @r_count = (SELECT DISTINCT COUNT(*)
FROM Passenger P, Records R
WHERE P.passenger_id = R.passenger_id
AND P.passenger_id = ???)
IF @r_count > 0
BEGIN
ROLLBACK TRAN
PRINT ('Permission denied. ' + CAST (@r_count AS Varchar(3)) + ' record(s) exist.')
END
ELSE
PRINT 'No records exist. Record deleted!'
END
我如何確定我的查詢中的passenger_id?
這是功課?防止孤立飛行記錄的最好方法是外鍵而不是觸發器。 –
[壞習慣踢:使用舊樣式的JOIN(http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style-joins。 ASPX) - 舊樣式* *風格是與*適當* ANSI'JOIN'在ANSI語法替換表的逗號分隔的列表 - ** ** 92 SQL標準(**超過20年**月)並且不鼓勵使用 –