触发到 运行 存储过程 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
- 你为什么要放下扳机 blk_data?
- 为什么要在
payroll
table 上创建触发器,而当您在问题中陈述暂存 table 名称是 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
table 中数据的任何更改都会导致执行存储过程 sp_payment
。我假设这是你的意图?
我有数据暂存 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
- 你为什么要放下扳机 blk_data?
- 为什么要在
payroll
table 上创建触发器,而当您在问题中陈述暂存 table 名称是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
table 中数据的任何更改都会导致执行存储过程 sp_payment
。我假设这是你的意图?