触发到 运行 存储过程 SQL Server 2008

Trigger to run stored procedure SQL Server 2008

我有数据暂存 table,每个月公司都会在暂存 table 中插入数据。我正在使用存储过程将数据表单暂存复制到多个 tables。我想为 运行 这些存储过程创建一个触发器。

例如我的暂存 table blk_data 和我的存储过程是 sp_payment,我尝试使用类似

的东西
IF EXISTS (SELECT name FROM sysobjects
           WHERE name = 'trg_pay' AND type = 'TR')
   DROP TRIGGER blk_data
GO

CREATE TRIGGER trg_pay
ON payroll
FOR INSERT, UPDATE, DELETE
AS
   sp_payment
GO

但它不起作用。请纠正我。

谢谢!

您需要执行它:

IF EXISTS (SELECT name FROM sysobjects
      WHERE name = 'trg_pay' AND type = 'TR')
   DROP TRIGGER trg_pay
GO
CREATE TRIGGER trg_pay
ON payroll
FOR INSERT,UPDATE,DELETE
AS
   exec sp_payment

GO

You do not have to specify the EXECUTE keyword when you execute stored procedures when the statement is the first one in a batch.

https://msdn.microsoft.com/en-us/library/ms188332.aspx

您必须采用其他方式。

一些事情...这是您打算为此触发器部署的脚本吗?我无法理解这可能是什么。

你的原话:

IF EXISTS (SELECT name FROM sysobjects
      WHERE name = 'trg_pay' AND type = 'TR')
   DROP TRIGGER blk_data
GO
CREATE TRIGGER trg_pay
ON payroll
FOR INSERT,UPDATE,DELETE
AS
   sp_payment

GO

你原来的问题:

I have staging Table for data, every month company insert data in staging table . I am using Stored Procedure to copy data form staging to multiple tables. I want to create a Trigger to run these Stored procedures. For example my Staging table Name is "blk_data" and my store procedure is "sp_payment" , i tried to using something like

  1. 你为什么要放下扳机 blk_data?
  2. 为什么要在 payroll table 上创建触发器,而当您在问题中陈述暂存 table 名称是 blk_data 时? (至少我是这样解释的)
  3. 您缺少执行官。

我想你实际上会想要这样的东西:

IF EXISTS (SELECT name FROM sysobjects
      WHERE name = 'trg_pay' AND type = 'TR')
   DROP TRIGGER trg_pay
GO
CREATE TRIGGER trg_pay
ON blk_data
FOR INSERT,UPDATE,DELETE
AS
   exec sp_payment

GO

这意味着对 blk_data table 中数据的任何更改都会导致执行存储过程 sp_payment。我假设这是你的意图?