【问题标题】:SQL SERVER. TSQL. Execute one my procedure after all other triggers and all other proceduresSQL 服务器。 TSQL。在所有其他触发器和所有其他程序之后执行一个我的程序
【发布时间】:2015-01-28 09:07:42
【问题描述】:

在数据库中已经存在所有触发器和过程之后,如何执行我的过程?

我有一个很大的数据库,有很多表,很多列。

这个数据库不是我创建的。

我需要在数据库中已经存在的所有触发器和过程结束时调用我自己的过程。

例如:当我进行插入时,数据库自动启动了许多触发器和过程。

在每个触发器和过程结束时,我需要调用我编写的一个过程。

怎么办?

更新:

或者至少我可以知道哪个是数据库中的最后一个触发器?那么我可以进入那里的程序吗?

【问题讨论】:

  • 请澄清您的问题。有点不清楚。
  • 您需要手动将您的程序的exec 添加到所有其他程序和触发器中。这听起来是个坏主意。
  • 我更新了我的问题。
  • 或者至少我可以知道哪个是数据库中的最后一个触发器?那么我可以在那里输入程序吗?
  • 如果您能告诉我们这个“必须最后调用”的过程将执行什么任务,我们可能会做得更好。也许有更好的方法来完成这项工作,根本不涉及触发器。

标签: sql sql-server tsql stored-procedures sql-server-2012


【解决方案1】:

您可以使用以下查询找到最后一个触发器

select sys.tables.name,sys.triggers.name,sys.trigger_events.type
,sys.trigger_events.type_desc, is_first,is_last
,sys.triggers.create_date,sys.triggers.modify_date
from sys.triggers inner join sys.trigger_events
on sys.trigger_events.object_id = sys.triggers.object_id
inner join sys.tables on sys.tables.object_id = sys.triggers.parent_id
WHERE is_Last=1
order by modify_date

如果没有一个触发器具有 is_last=1 则意味着未设置触发器执行顺序。要自己设置触发器执行顺序,您可以使用以下查询

EXEC sp_settriggerorder 
@triggername= 'Sales.uSalesOrderHeader', 
@order='Last', 
@stmttype = 'UPDATE';

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-26
    • 2020-09-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多