使用参数在sql server中的触发器内执行存储过程

问题描述 投票:0回答:2

我创建了一个触发器,它将在 INSERT 上执行存储过程:

USE [DB]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
 ALTER TRIGGER [dbo].[trigger_name] ON [dbo].[table_name]
  AFTER INSERT AS
  BEGIN
    SET NOCOUNT ON
    EXEC procedure_name_exec param1, param2, param3
  END

我想要实现的是使用参数执行存储过程,这些参数代表刚刚插入的行并且基本上触发了此触发器。

sql sql-server stored-procedures triggers insert
2个回答
0
投票

我遇到了类似的问题,这是我解决的方法。

USE [DB]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
 ALTER TRIGGER [dbo].[trigger_name] ON [dbo].[table_name]
  AFTER INSERT AS
  BEGIN
    SET NOCOUNT ON
    DECLARE @nRows INT;
    DECLARE @var1 DATETIME;
    DECLARE @InsertedDates TABLE (
        NewDate DATETIME
    );

    INSERT INTO @InsertedDates
    SELECT [column name]
    FROM INSERTED;

    SELECT @nRows = COUNT(*) FROM @InsertedDates;

    WHILE @nRows > 0
    BEGIN
        SELECT TOP 1 @var1 = NewDate FROM @InsertedDates;

        EXEC    procedure_name_exec @var1;

        DELETE FROM @InsertedDates 
        WHERE @var1 = NewDate;

        SELECT @nRows = COUNT(*) FROM @InsertedDates;
    END;
  END;

总体思路是认识到

Inserted
是一个表,您需要处理每一行。我通过复制表(不确定是否有必要)并处理表变量来完成此操作,然后从表变量中删除我处理的行。

注意:如果处理插入的重复项很重要,那么您需要对它们进行计数并多次调用存储过程。


-2
投票

这是我正在寻找的东西,并给了我我正在寻找的结果:

USE [DB]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
 ALTER TRIGGER [dbo].[trigger_name] ON [dbo].[table_name]
  AFTER INSERT AS
  BEGIN
    SET NOCOUNT ON
    declare @var1 DATETIME
    SELECT @var1 = inserted.[column name] 
    FROM inserted

    EXEC procedure_name_exec @var1
  END
© www.soinside.com 2019 - 2024. All rights reserved.