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

标签 sql sql-server tsql sql-server-2008 triggers

我在 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

关于sql - 如何防止数据库触发器递归?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1529412/

相关文章:

sql-server - Sql Server -- 去除非数字字符

sql - 在 PgAdmin 的 Postgresql 中使用反向 for 循环反转数字

MySQL - 列的条件连接

mysql - 如何从一组电子邮件中选择所有唯一的 gmail 电子邮件?

sql - 在 SELECT 中选择行作为列

Sql Server - 在查询中选择逻辑结果

sql - TSQL - UPDATE 语句中的自动增量

sql-server - 我的 SQL 创建表为语法错误

mysql - SQL - 如何计算自定义创建的错误代码

java - Hibernate 与 sqlserver 死锁问题