【问题标题】:How to discover trigger's parent schema?如何发现触发器的父模式?
【发布时间】:2009-11-03 08:53:17
【问题描述】:

为了发现任何给定 MS SQL Server 数据库中的所有触发器,我目前正在查询 sysobjects 表(这很好,因为它在我必须支持的 MS SQL Server 2000 中工作)例如

SELECT R1.name AS trigger_name, 
       T1.name AS trigger_parent_table_name
  FROM sysobjects AS R1 
       INNER join sysobjects AS T1 
          ON R1.parent_obj = T1.id 
 WHERE R1.xtype = 'tr';

这给了我一个减少的触发器名称列表,每个我可以使用

EXEC sp_helptext 'trigger_name_here' 

找到定义。这适用于仅使用默认 dbo 架构的数据库。

我现在有一个使用多个模式的 MS SQL Server 2005 数据库。发现每个触发器的架构的最佳方法是什么?

【问题讨论】:

    标签: sql sql-server sql-server-2005 triggers


    【解决方案1】:

    您正在寻找触发器的父对象,因此它始终是一个表。在 sys.tables(系统视图)中,您可以获取 schema_id,并且可以使用它来 sys.schemas(系统视图)来获取架构的名称。

    希望这会有所帮助。

    --

    编辑:

    代码:

    SELECT     sys.objects.name AS [trigger], 
               sys.tables.name AS [table], 
               sys.objects.type, 
               sys.schemas.name AS [schema]
    FROM       sys.schemas RIGHT OUTER JOIN
               sys.tables ON sys.schemas.schema_id = sys.tables.schema_id RIGHT OUTER JOIN
               sys.objects ON sys.tables.object_id = sys.objects.parent_object_id
    WHERE      sys.objects.type = 'tr'
    

    这是与 sys.tables 一起使用的,但您只能使用 sys.objects 来执行此操作,这是查找父项和模式的一般选择:

    SELECT     O.name, O.type, S.name AS [schema], 
               OP.name AS parent_name, OP.type AS parent_type, SP.name AS parent_schema  
    FROM       sys.schemas AS SP RIGHT OUTER JOIN
               sys.objects AS OP ON SP.schema_id = OP.schema_id RIGHT OUTER JOIN
               sys.objects AS O LEFT OUTER JOIN
               sys.schemas AS S ON O.schema_id = S.schema_id ON OP.object_id = O.parent_object_id
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-23
      • 1970-01-01
      • 2020-05-20
      • 2011-09-04
      • 2012-11-20
      • 1970-01-01
      • 2013-02-18
      • 1970-01-01
      相关资源
      最近更新 更多