sql – 如何防止数据库触发器的递归?

我在SQL Server 2008数据库的表上有以下触发器。它是递归的,所以我需要停止它。

在插入或更新记录后,我试图简单地更新该表上的单个字段。

这是触发器:

ALTER TRIGGER [dbo].[tblMediaAfterInsertOrUpdate] 
   ON  [dbo].[tblMedia]
   BEFORE INSERT, UPDATE
AS 
BEGIN
    SET NOCOUNT ON

    DECLARE @IdMedia INTEGER,
        @NewSubject NVARCHAR(200)   

    SELECT @IdMedia = IdMedia, @NewSubject = Title
    FROM INSERTED

    -- Now update the unique subject field.
    -- NOTE: dbo.CreateUniqueSubject is my own function. 
    --       It just does some string manipulation.
    UPDATE tblMedia
    SET UniqueTitle = dbo.CreateUniqueSubject(@NewSubject) + 
                      CAST((IdMedia) AS VARCHAR(10))
    WHERE tblMedia.IdMedia = @IdMedia
END

任何人都可以告诉我如何防止触发器的插入再次触发另一个触发器?

不知道它是否与OP的问题有关,但是如果你来到这里来了解如何防止在触发器中发生递归或相互递归,您可以这样测试:

IF TRIGGER_NESTLEVEL() <= 1/*this update is not coming from some other trigger*/

MSDN link

http://stackoverflow.com/questions/1529412/how-do-i-prevent-a-database-trigger-from-recursing

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:sql – 如何防止数据库触发器的递归?