gpt4 book ai didi

sql - 如何发现触发器的父模式?

转载 作者:行者123 更新时间:2023-12-02 09:00:25 25 4
gpt4 key购买 nike

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

最佳答案

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

希望这有帮助。

--

编辑:

代码:

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

关于sql - 如何发现触发器的父模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1666060/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com