George.Palacios Asked: 2019-10-11 08:28:20 +0800 CST2019-10-11 08:28:20 +0800 CST 2019-10-11 08:28:20 +0800 CST 如何检查触发器是否在 INSERT、UPDATE 或 DELETE 语句上触发? 772 如何确定触发器是否针对 INSERT、UPDATE 或 DELETE 语句? 我已签入sys.triggers,但看不到与触发器触发的操作相关的任何内容。 sql-server trigger 1 个回答 Voted Best Answer George.Palacios 2019-10-11T08:28:20+08:002019-10-11T08:28:20+08:00 该sys.triggers表不公开此数据,而是我们有两个选项: 对象属性 使用OBJECTPROPERTY元数据函数,我们可以将操作作为属性返回,如下所示: OBJECTPROPERTY(object_id, 'ExecIsUpdateTrigger') OBJECTPROPERTY(object_id, 'ExecIsInsertTrigger') OBJECTPROPERTY(object_id, 'ExecIsDeleteTrigger') 这将返回一个简单的位值,指示触发器是否在该特定操作上触发。 sys.trigger_events 根据文档,这包含触发触发的每个事件的一行。具体来说,我们感兴趣的列是type和type_desc。 type是表的外键sys.trigger_event_types-type_desc似乎包含表中的type_name列sys.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';
该
sys.triggers
表不公开此数据,而是我们有两个选项:对象属性
使用OBJECTPROPERTY元数据函数,我们可以将操作作为属性返回,如下所示:
这将返回一个简单的位值,指示触发器是否在该特定操作上触发。
sys.trigger_events
根据文档,这包含触发触发的每个事件的一行。具体来说,我们感兴趣的列是
type
和type_desc
。type
是表的外键sys.trigger_event_types
-type_desc
似乎包含表中的type_name
列sys.trigger_event_types
。可以使用以下脚本返回此数据: