¿Cómo identificar los objetos del sistema cuando se visualiza la lista de objetos de la base de datos de SQL Server?

Estoy tratando de enumerar todos los procedimientos almacenados de todas las bases de datos en mi servidor, y parece que no puedo filtrar los objetos del sistema de manera confiable. Estaba usando:

SELECT *
  FROM sysobjects
 WHERE id > 100

Lo que parece funcionar bien en todas las bases de datos, excepto MSDB, que está llena de una tonelada de procesos almacenados con ID de aspecto normal, pero son procesos almacenados en el sistema. Por lo que puedo decir, no hay forma de filtrar los procesos almacenados del sistema utilizando cualquiera de los valores de la tabla de sysobjects. ¿Alguien más sabe de un valor que pueda usarse para filtrar?

Todos están marcados como type = "P", lo que significa que es un proceso almacenado, pero parece que no hay ningún indicador para especificar si se trata de un proceso almacenado del sistema o de un usuario. Puedo usar la vista y filtro sys.objects para "IsMsShipped = 0", pero me gustaría algo que también funcione en SQL 2000, por lo que preferiría usar las vistas más antiguas (como sysobjects) si es posible.

Respuestas a la pregunta(2)

Su respuesta a la pregunta