Sql*_*yan 2 sql-server sql-server-2008 database-schema
我正在尝试列出我服务器上所有数据库中的所有存储过程,而我似乎无法可靠地过滤掉系统对象.我用的是:
SELECT *
FROM sysobjects
WHERE id > 100
Run Code Online (Sandbox Code Playgroud)
这似乎在除MSDB之外的每个数据库中都能正常工作,MSDB充满了大量具有正常ID的存储过程,但它们是系统存储的过程.据我所知,我无法使用sysobjects表中的任何值过滤掉系统存储过程 - 其他人是否知道可用于过滤的值?
它们都标记为type ="P",这意味着它是一个存储过程,但似乎没有标志来指定它是系统存储过程还是用户存储过程.我可以使用sys.objects视图并过滤"IsMsShipped = 0",但我想要的东西也适用于SQL 2000,所以如果可能的话,我更喜欢使用较旧的视图(如sysobjects).
这适用于我的SQL Server 2008 R2安装.除了用户数据库之外,我什么都看不到
SELECT
*
FROM
sys.objects
WHERE
OBJECTPROPERTY(object_id, 'IsMSShipped') = 0
Run Code Online (Sandbox Code Playgroud)
你可以改变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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7697 次 |
| 最近记录: |