查看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
    

要回复问题请先登录注册