You have to iterate through all databases to do that. If you're adventurous enough, you could use the undocumented stored procedure sp_MSForEachDB, which is [buggy and unreliable][1]. Another possibility is using one of its replacements: [Aaron Bertrand's][2] or [my humble attempt][3]. Yet another possibility is using a cursor to loop through all databases: USE master; DECLARE @name sysname; DECLARE @sql nvarchar(max) = ' SELECT DB_NAME() AS [database_name], OBJECT_SCHEMA_NAME(object_id) AS [schema_name], name AS [procedure_name] FROM sys.procedures '; DECLARE @theSQL nvarchar(max); DECLARE @results TABLE ( [database_name] sysname, [schema_name] sysname, [procedure_name] sysname ); DECLARE dbs CURSOR STATIC LOCAL FORWARD_ONLY READ_ONLY FOR SELECT name FROM sys.databases; -- you may want to exclude system databases here -- WHERE name NOT IN ('master', 'model', 'msdb', 'tempdb', 'distribution') OPEN dbs; FETCH NEXT FROM dbs INTO @name; WHILE @@FETCH_STATUS = 0 BEGIN SET @theSQL = 'EXEC ' + QUOTENAME(@name) + '.sys.sp_executesql @sql'; INSERT @results EXEC sys.sp_executesql @theSQL, N'@sql nvarchar(max)', @sql FETCH NEXT FROM dbs INTO @name; END CLOSE dbs; DEALLOCATE dbs; SELECT * FROM @results; [1]: https://sqlblog.org/2010/02/08/bad-habits-to-kick-relying-on-undocumented-behavior [2]: https://www.mssqltips.com/sqlservertip/5694/execute-a-command-in-the-context-of-each-database-in-sql-server--part-2/ [3]: http://spaghettidba.com/2011/09/09/a-better-sp_msforeachdb/