[英]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”,我尝试使用类似
blk_data
时,为什么要在payroll
表上创建触发器? (至少这就是我的解释方式) 我认为您实际上想要这样的东西:
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.