我想創建修改現有觸發器的過程。觸發器負責阻止使用特定ID更新的行。我想類似的東西:修改現有觸發器的步驟
CREATE PROCEDURE Change_trigger
@List_of_ids varchar(8000)
AS
ALTER TRIGGER blocks
ON ttt
INSTEAD OF update
AS
BEGIN
If (SELECT Id_ttt FROM inserted) IN (@List_of_ids)
BEGIN
raiserror('You cannot modify this record.', 12, 1)
RETURN
END
UPDATE ttt
SET
field1 = INSERTED.field1
FROM INSERTED
WHERE INSERTED.Id_ttt = ttt.Id_ttt
END
參數@List_of_ids
會是這樣:2,3,4,5,9,52
。但是當我嘗試創建此過程時出現錯誤:
Msg 156, Level 15, State 1, Procedure Change_trigger, Line 4
Incorrect syntax near the keyword 'TRIGGER'.
觸發器已創建。
而不是不斷修改觸發器,爲什麼不只是一個包含觸發器然後引用的禁止ID的表?然後程序可以照顧填充這張表 - 如果這個程序是需要的話。順便說一下,SQL Server內置了*設計*來處理多個值(表值參數,XML)。 'varchar'不是其中之一。 –
此外,您的觸發器已損壞。 「IN」運算符在其左側需要一個標量值。當'inserted'包含*多行*(因爲它很容易)時,觸發器會產生一個錯誤。 (當然,單個更新可能會影響塊列表中的某些*行,以及某些*行不是這樣的行。您想如何處理這種情況?目前,所有這些更新都會被拒絕,但那是你想要的*還是僅僅是你已經建立了這個觸發器的意外?) –
@Damien_The_Unbeliever,謝謝你的評論。那麼如何處理一個查詢中的多行更新?當我想保持這樣的觸發器時,要阻止特定的ID?你還提到其他表格在那裏存儲禁止的ID。這真有趣。但我需要程序,因爲這個阻塞ID將會改變 – XardasLord