如何发现触发器的父架构?

时间:2009-11-03 08:53:18

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

要发现任何给定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数据库。发现每个触发器的架构的最佳方法是什么?

1 个答案:

答案 0 :(得分:6)

您正在寻找触发器的父对象,因此它始终是一个表。在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