Sql server 如何使用SQL Server查找与表关联的所有触发器?

Sql server 如何使用SQL Server查找与表关联的所有触发器?,sql-server,sql-server-2008,Sql Server,Sql Server 2008,我在SQLServer中为一个表创建了一个触发器,它适用于我 我的问题是:如何找到它并修改它 我使用此查询查找我的触发器: select * from sys.triggers 这会找到所有触发器,但是如何打开它并更改触发器呢 select m.definition from sys.all_sql_modules m inner join sys.triggers t on m.object_id = t.object_id 这里只需复制定义并更改触发器 否则,您可以转到SSMS并展开

我在SQLServer中为一个表创建了一个触发器,它适用于我

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

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

select * from sys.triggers
这会找到所有触发器,但是如何打开它并更改触发器呢

select m.definition from sys.all_sql_modules m inner join  sys.triggers t
on m.object_id = t.object_id 
这里只需复制定义并更改触发器


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

您只需使用SSMS即可完成此操作。只需转到表名并展开触发器节点,即可查看与该表关联的触发器列表。右键单击以修改触发器。

通过

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

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

修改触发器

  • 展开服务器组,然后展开服务器

  • 展开数据库,展开包含 触发器属于,然后单击“表”

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

  • 在名称中,选择触发器的名称

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

  • 要检查触发器的语法,请单击检查语法


  • 通过这种方式,您可以列出与给定表关联的所有触发器。

    下面的查询非常简单

    select (select [name] from  sys.tables where [object_id] = tr.parent_id ) as TableName ,*  from sys.triggers tr
    
    这可能有用

    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');
    

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

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

    通过此查询,您可以在所有表和所有视图中找到所有触发器

        ;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 
    
    在表上查找触发器:

    您可以找到参考表的存储过程:


    从信息_schema.TRIGGERS中选择*

    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'
    

    这将为您提供指定表上的所有触发器。您可以通过下面的查询查看与数据库相关的所有触发器

    select * from sys.triggers
    
    对于opentrigger,您可以使用以下语法

    sp_helptext 'dbo.trg_InsertIntoUserTable'
    

    尝试使用:

    select * from sys.objects where type='tr' and name like '%_Insert%'
    

    你可以用手指打开扳机
    sp_helptext yourtriggername

    如果%YoutTableName%不仅仅代表一个表,则可能返回太多行。示例:Product--promotion这是一个很好的答案,因为它应该适用于所有开发环境。我需要在SSMS中的“我的数据库触发器”文件夹下找到一个未显示的触发器,该触发器连接到Azure托管数据库。虽然此代码片段可能会解决此问题,但确实有助于提高您文章的质量。请记住,您将在将来回答读者的问题,这些人可能不知道您的代码建议的原因。
     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'
     
      
    
    sp_helptext 'dbo.trg_InsertIntoUserTable'
    
    select * from sys.objects where type='tr' and name like '%_Insert%'
    
     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'
     
      
    
    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*/