How to identify system objects when viewing list of SQL Server database objects?

回眸只為那壹抹淺笑 提交于 2019-12-20 03:03:11

问题


I'm trying to list all the stored procedures from all the databases on my server, and I can't seem to filter out system objects reliably. I was using:

SELECT *
  FROM sysobjects
 WHERE id > 100

Which seems to work fine in every database except MSDB, which is full of a ton of stored procs with normal-looking IDs, but they're system stored procs. As far as I can tell, there's no way for me to filter out system stored procs using any of the values in the sysobjects table - does anybody else know of a value that can be used to filter?

They're all marked as type="P", which means it's a stored proc, but there seems to be no flag to specify if it's a system stored proc or a user one. I can use the sys.objects view and filter for "IsMsShipped=0", but I'd like something that also works on SQL 2000, so I'd prefer to use the older views (like sysobjects) if it's possible.


回答1:


This works on my SQL Server 2008 R2 install. I don't see much at all except for user databases

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

You can change sys.objects to say, sys.tables and it still works, or use the "type" column to filter. Or use OBJECTPROPERTY(object_id, 'IsProcedure') etc.

Note: it's sys.objects in SQL Server 2005+

Note 2: OBJECTPROPERTY will work for SQL Server 2000 too:

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



回答2:


SQL Server 2005 and higher

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


来源:https://stackoverflow.com/questions/6361188/how-to-identify-system-objects-when-viewing-list-of-sql-server-database-objects

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!