gpt4 book ai didi

sql-server - 查看 SQL Server 数据库对象列表时如何识别系统对象?

转载 作者:行者123 更新时间:2023-12-03 16:47:23 24 4
gpt4 key购买 nike

我正在尝试列出服务器上所有数据库中的所有存储过程,但我似乎无法可靠地过滤掉系统对象。我正在使用:

SELECT *
FROM sysobjects
WHERE id > 100

这似乎在除 MSDB 之外的每个数据库中都能正常工作,MSDB 充满了大量具有正常 ID 的存储过程,但它们是系统存储的过程。据我所知,我无法使用 sysobjects 表中的任何值过滤掉系统存储的过程 - 有没有人知道可以用来过滤的值?

它们都被标记为 type="P",这意味着它是一个存储过程,但似乎没有标志来指定它是系统存储过程还是用户存储过程。我可以使用 sys.objects View 并筛选“IsMsShipped=0”,但我想要一些也适用于 SQL 2000 的东西,所以如果可能的话,我更喜欢使用旧 View (如 sysobjects)。

最佳答案

这适用于我的 SQL Server 2008 R2 安装。除了用户数据库,我什么都看不到

SELECT 
*
FROM
sys.objects
WHERE
OBJECTPROPERTY(object_id, 'IsMSShipped') = 0

您可以更改sys.objects也就是说,sys.tables 并且它仍然有效,或者使用“类型”列进行过滤。或者使用 OBJECTPROPERTY(object_id, 'IsProcedure') 等。

注意:在 SQL Server 2005+ 中是 sys.objects

注 2:OBJECTPROPERTY也适用于 SQL Server 2000:

SELECT 
*
FROM
sysobjects
WHERE
OBJECTPROPERTY(id, 'IsMSShipped') = 0

关于sql-server - 查看 SQL Server 数据库对象列表时如何识别系统对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6361188/

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