我想创建修改现有触发器的过程。触发器负责阻止使用特定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