繁体   English   中英

触发运行存储过程SQL Server 2008

[英]Trigger to run stored procedure SQL Server 2008

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

例如,我的登台表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

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

https://msdn.microsoft.com/zh-CN/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

和你原来的问题:

我有登台表中的数据,每个月公司都会在登台表中插入数据。 我正在使用存储过程将数据表单分段复制到多个表。 我想创建一个触发器来运行这些存储过程。 例如,我的登台表名称是“ blk_data”,而存储过程是“ sp_payment”,我尝试使用类似

  1. 为什么要删除触发器blk_data?
  2. 在问题中声明登台表名称为blk_data时,为什么要在payroll表上创建触发器? (至少这就是我的解释方式)
  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表中数据的任何更改都将导致执行存储过程sp_payment 我假设这是您的意图?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM