如何检查触发器是否在 INSERT、UPDATE 或 DELETE 语句上触发?

Geo*_*ios 11 trigger sql-server

如何确定触发器是针对 INSERT、UPDATE 还是 DELETE 语句?

我已签入sys.triggers,但看不到与触发器触发的操作相关的任何内容。

Geo*_*ios 12

sys.triggers表不公开这些数据,而是我们有两个选择:


对象属性

使用OBJECTPROPERTY元数据函数,我们可以将操作作为属性返回,如下所示:

OBJECTPROPERTY(object_id, 'ExecIsUpdateTrigger')
OBJECTPROPERTY(object_id, 'ExecIsInsertTrigger')
OBJECTPROPERTY(object_id, 'ExecIsDeleteTrigger')
Run Code Online (Sandbox Code Playgroud)

这将返回一个简单的位值,指示触发器是否在该特定操作上触发。


sys.trigger_events

根据文档,这包含触发器触发的每个事件的行。具体来说,我们感兴趣的列是typetype_desc

typesys.trigger_event_types表的外键-type_desc似乎包含表中的type_namesys.trigger_event_types

可以使用以下脚本返回此数据:

SELECT
    [o].[name]
   ,[t].[type_desc]
FROM
    [sys].[trigger_events] AS [t]
    INNER JOIN [sys].[objects] AS [o] ON
        [o].[object_id] = [t].[object_id]
WHERE
    [o].[name] = 'TriggerNameHere';
Run Code Online (Sandbox Code Playgroud)