29 June 2006 09:55
tonyrogerson
Listing User - Functions, SP's, Tables and Views (SQL Standard/SQL 2000/SQL 2005)
The 'SQL standard' way of doing it...
SELECT
*
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_TYPE = 'PROCEDURE'
SELECT
*
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_TYPE = 'FUNCTION'
SELECT
*
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
SELECT
*
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'VIEW'
The SQL Server 2000 way of doing it...
SELECT
* -- Stored Procs
FROM sysobjects
WHERE objectproperty( id, N'IsMSShipped' ) = 0
AND objectproperty( id, N'IsProcedure' ) = 1
SELECT
* -- Functions
FROM sysobjects
WHERE objectproperty( id, N'IsMSShipped' ) = 0
AND ( objectproperty( id, N'IsTableFunction' ) = 1
OR objectproperty( id, N'IsScalarFunction' ) = 1 )
SELECT
* -- User tables
FROM sysobjects
WHERE objectproperty( id, N'IsMSShipped' ) = 0
AND objectproperty( id, N'IsTable' ) = 1
SELECT
* -- Views
FROM sysobjects
WHERE objectproperty( id, N'IsMSShipped' ) = 0
AND objectproperty( id, N'IsView' ) = 1
The SQL Server 2005 way of doing it is the same as 2000 but we use schemas more, sys.objects instead of sysobjects, oh and object_id and not id...
SELECT
* -- Stored Procs
FROM sys.objects
WHERE objectproperty( object_id, N'IsMSShipped' ) = 0
AND objectproperty( object_id, N'IsProcedure' ) = 1
SELECT
* -- Functions
FROM sys.objects
WHERE objectproperty( object_id, N'IsMSShipped' ) = 0
AND ( objectproperty( object_id, N'IsTableFunction' ) = 1
OR objectproperty( object_id, N'IsScalarFunction' ) = 1 )
SELECT
* -- User tables
FROM sys.objects
WHERE objectproperty( object_id, N'IsMSShipped' ) = 0
AND objectproperty( object_id, N'IsTable' ) = 1
SELECT
* -- Views
FROM sys.objects
WHERE objectproperty( object_id, N'IsMSShipped' ) = 0
AND objectproperty( object_id, N'IsView' ) = 1
So, which one do I prefer; well its certainly not the INFORMATION_SCHEMA views because they don't scale; if you need to use this type of thing inside stored procedures and performance is a factor then use sysobjects or sys.objects!
Filed under: SQL Server