48

我在SQL Server中为表创建了一个触发器,它对我有用。

我的问题是:如何找到并修改它?

我使用此查询来查找我的触发器:

select * from sys.triggers

这会找到所有触发器,但是如何打开它并更改触发器?

4

16 回答 16

53

您可以使用 SSMS 简单地做到这一点。只需转到您的表名并展开触发器节点即可查看与该表关联的触发器列表。右键单击以修改触发器。 在此处输入图像描述

于 2012-09-10T07:28:22.860 回答
44
select so.name, text
from sysobjects so, syscomments sc
where type = 'TR'
and so.id = sc.id
and text like '%YourTableName%'

这样,您可以列出与给定表关联的所有触发器。

于 2012-09-10T07:29:13.017 回答
20

这可能有用

SELECT 
 t.name AS TableName,
 tr.name AS TriggerName  
FROM sys.triggers tr
INNER JOIN sys.tables t ON t.object_id = tr.parent_id
WHERE 
t.name in ('TABLE_NAME(S)_GOES_HERE');

这样,您只需插入表的名称,查询将获取您需要的所有触发器

于 2015-07-08T12:34:18.410 回答
7
select m.definition from sys.all_sql_modules m inner join  sys.triggers t
on m.object_id = t.object_id 

这里只需复制定义并更改触发器。

否则,您可以转到 SSMS 并展开您的数据库,然后在可编程性下展开数据库触发器,然后右键单击特定触发器并单击修改,您也可以更改。

于 2012-09-10T07:25:53.510 回答
6

使用 sp_helptrigger 查找关联表的触发器列表

于 2015-09-21T10:03:14.697 回答
4

在表上查找触发器:

select so.name, text
from sysobjects so, syscomments sc
where type = 'TR'
and so.id = sc.id
and text like '%TableName%'

并且您可以找到具有表参考的存储过程:

SELECT Name
FROM sys.procedures
WHERE OBJECT_DEFINITION(OBJECT_ID) LIKE '%yourtablename%'
于 2017-08-31T13:16:48.570 回答
3

经过

需要用表名和表的模式列出 SQL Server 数据库中的所有触发器

此 URL 具有一组查询,您可以通过这些查询获取与特定表关联的触发器列表。

我相信您正在使用 sqlserver 以下是获取修改触发器的步骤

修改触发器

  1. 展开一个服务器组,然后展开一个服务器。

  2. 展开数据库,展开包含触发器的表所属的数据库,然后单击表。

  3. 在详细信息窗格中,右键单击触发器所在的表,指向所有任务,然后单击管理触发器。

  4. 在名称中,选择触发器的名称。

  5. 根据需要更改文本字段中触发器的文本。按 CTRL+TAB 缩进 SQL Server 企业管理器触发器的文本。

  6. 要检查触发器的语法,请单击检查语法。

于 2012-09-10T07:29:08.507 回答
3

使用此查询,您可以在所有表​​和所有视图中找到所有触发器。

    ;WITH
        TableTrigger
        AS
        (
            Select 
                Object_Kind = 'Table',
                Sys.Tables.Name As TableOrView_Name , 
                Sys.Tables.Object_Id As Table_Object_Id ,
                Sys.Triggers.Name As Trigger_Name, 
                Sys.Triggers.Object_Id As Trigger_Object_Id 
            From Sys.Tables 
            INNER Join Sys.Triggers On ( Sys.Triggers.Parent_id = Sys.Tables.Object_Id )
            Where ( Sys.Tables.Is_MS_Shipped = 0 )
        ),
        ViewTrigger
        AS
        (
            Select 
                Object_Kind = 'View',
                Sys.Views.Name As TableOrView_Name , 
                Sys.Views.Object_Id As TableOrView_Object_Id ,
                Sys.Triggers.Name As Trigger_Name, 
                Sys.Triggers.Object_Id As Trigger_Object_Id 
            From Sys.Views 
            INNER Join Sys.Triggers On ( Sys.Triggers.Parent_id = Sys.Views.Object_Id )
            Where ( Sys.Views.Is_MS_Shipped = 0 )
        ),
        AllObject
        AS
        (
            SELECT * FROM TableTrigger

            Union ALL

            SELECT * FROM ViewTrigger
        )


    Select 
        * 
    From AllObject
    Order By Object_Kind, Table_Object_Id 
于 2017-02-20T21:25:39.660 回答
1

您可以通过以下查询查看与您的数据库相关的所有触发器

select * from sys.triggers

对于打开触发器,您可以使用以下语法

sp_helptext 'dbo.trg_InsertIntoUserTable'
于 2019-03-28T02:11:05.003 回答
1
 select o1.name as trigger_name,o2.name as table_name from sys.objects o1 
 join sys.objects o2 on 
 o1.parent_object_id=o2.object_id     
 where o1.type='TR' 
 and o2.name='my_table'
 
  
于 2021-02-15T23:31:59.513 回答
1
select   B.name 
from     sys.objects    A
join     sys.triggers   B
on     A.object_id    =    B.parent_id
where    A.name    ='Table_name' /*Table Name*/
于 2021-06-09T06:31:27.347 回答
0

下面很简单的查询

select (select [name] from  sys.tables where [object_id] = tr.parent_id ) as TableName ,*  from sys.triggers tr
于 2015-04-17T05:58:34.213 回答
0

从 information_schema.TRIGGERS 中选择 *;

于 2018-02-06T08:44:57.157 回答
0
select t.name as TriggerName,m.definition,is_disabled 
from sys.all_sql_modules m 
inner join  
sys.triggers t
on m.object_id = t.object_id 
inner join sys.objects o
on o.object_id = t.parent_id
Where o.name = 'YourTableName'

这将为您提供指定表上的所有触发器

于 2018-07-18T07:31:53.713 回答
0

尝试使用:

select * from sys.objects where type='tr' and name like '%_Insert%'
于 2019-03-28T09:41:16.300 回答
0

您可以使用 sp_helptext yourtriggername 打开触发器

于 2019-07-18T05:45:19.240 回答