我有数据登台表,每个月公司在登台表中插入数据。我正在使用存储过程将数据表单分段复制到多个表。我想创建一个触发器来运行这些存储过程。
例如我的临时表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
但它不起作用。请指正。
谢谢!
答案 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”,我试图使用像
这样的东西
payroll
时,为什么要在blk_data
表上创建触发器? (至少那是我解释它的方式)我认为你真的想要这样的东西:
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
。我假设这是你的意图吗?