如何解决查看SQL Server数据库对象列表时如何识别系统对象?
| 我正在尝试列出服务器上所有数据库中的所有存储过程,但我似乎无法可靠地过滤掉系统对象。我正在使用:SELECT *
FROM sysobjects
WHERE id > 100
这似乎在MSDB以外的每个数据库中都可以正常工作,MSDB充满了大量具有正常ID的存储proc,但是它们是系统存储的proc。据我所知,我无法使用sysobjects表中的任何值来过滤掉系统存储的proc-其他人是否知道可用于过滤的值?
它们都被标记为type = \“ P \”,这意味着它是存储的proc,但是似乎没有标志来指定它是系统存储的proc还是用户的proc。我可以将sys.objects视图和过滤器用于\“ IsMsShipped = 0 \”,但是我希望某些东西也可以在SQL 2000上使用,因此,我希望使用较旧的视图(例如sysobjects) \是可能的。
解决方法
这适用于我的SQL Server 2008 R2安装。除了用户数据库,我什么都看不到
SELECT
*
FROM
sys.objects
WHERE
OBJECTPROPERTY(object_id,\'IsMSShipped\') = 0
您可以将sys.objects更改为sys.tables,但它仍然可以使用,或者使用“ type”列进行过滤。或使用OBJECTPROPERTY(object_id,\'IsProcedure \')等。
注意:它是SQL Server 2005+中的sys.objects
注意2:OBJECTPROPERTY也将适用于SQL Server 2000:
SELECT
*
FROM
sysobjects
WHERE
OBJECTPROPERTY(id,\'IsMSShipped\') = 0
, SQL Server 2005及更高版本
SELECT
SCHEMA_NAME(obj.schema_id) AS schema_name,obj.name AS proc_name
FROM
sys.procedures obj WITH(NOLOCK)
ORDER BY
schema_name,proc_name
SQL Server 2000
SELECT
USER_NAME(obj.uid) AS user_name,obj.name AS proc_name,FROM
sysobjects obj WITH(NOLOCK)
WHERE
(obj.status & 0x80000000) = 0
AND RTRIM(obj.xtype) IN (\'P\',\'RF\')
ORDER BY
user_name,proc_name
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。