如何创建 SQL 触发器以在表更新时执行存储过程

con*_*pro 4 trigger sql-server stored-procedures t-sql

我需要一些帮助来创建触发器以在创建 qf.table 时运行 qf.stored_procedure。目前,我有一项工作是每 15 分钟运行一次存储过程,但不能进行更改。

这个想法是让触发器在表更新时运行存储过程,而不管它是单行还是全部。以及不确定是否在表下的触发器或数据库触发器中创建它?。我希望脚本检查触发器是否存在,如果不存在则创建它。

表名:qf.customer_working_hours 列:WHours_id,DayOFW

存储过程: qf.ServiveRefreshCustomer_WH

我是 SQL 脚本和 SQL 触发器的新手,任何帮助将不胜感激

Mic*_*ski 6

我假设您正在尝试使用触发器实现一些基本的复制。只要您的过程仍然相当简单,这应该可以正常工作。

但是,我建议您阅读(即谷歌)为什么从触发器执行存储过程不是一个好主意,以及 SQL 的内置事务复制功能。这是第二个主题的实用指南:http : //www.sql-server-performance.com/2010/transactional-replication-2008-r2/

话虽如此,这是我认为应该起作用的:

USE [database_name]
IF EXISTS (SELECT 1 FROM sys.triggers WHERE name = N'trigger_name')
BEGIN
  THROW 51000, 'The trigger [trigger_name] already exists.', 1;
END
ELSE
  CREATE TRIGGER [trigger_name] ON qf.customer_working_hours
  AFTER INSERT, UPDATE, DELETE AS
  BEGIN
    SET NOCOUNT ON
    EXEC [procedure_database].qf.ServiveRefreshCustomer_WH
  END
BEGIN
END
Run Code Online (Sandbox Code Playgroud)

编辑:更新触发器,如果​​存在,请检查下面 Aaron 的建议。