触发器以运行存储过程SQL Server 2008

时间:2015-06-12 15:09:50

标签: sql sql-server sql-server-2008 triggers

我有数据登台表,每个月公司在登台表中插入数据。我正在使用存储过程将数据表单分段复制到多个表。我想创建一个触发器来运行这些存储过程。

例如我的临时表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

但它不起作用。请指正。

谢谢!

2 个答案:

答案 0 :(得分:2)

你需要执行它:

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
  

您不必指定   在语句执行存储过程时执行EXECUTE关键字   是批次中的第一个。

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

你需要的其他方式。

答案 1 :(得分:1)

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

您原来的陈述:

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

和你原来的问题:

  

我有数据登台表,每个月公司在登台表中插入数据。我正在使用存储过程将数据表单转移复制到多个表。我想创建一个Trigger来运行这些存储过程。例如我的临时表名称是“blk_data”,我的商店程序是“sp_payment”,我试图使用像

这样的东西
  1. 你为什么放弃触发器blk_data?
  2. 当您在问题中说明临时表名称为payroll时,为什么要在blk_data表上创建触发器? (至少那是我解释它的方式)
  3. 你错过了一名执行官。
  4. 我认为你真的想要这样的东西:

    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表中对数据的任何更改都会导致执行存储过程sp_payment。我假设这是你的意图吗?