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