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.
This works on my SQL Server 2008 R2 install. I don’t see much at all except for user databases
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: