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 unreliablebuggy and unreliable.
Another possibility is using one of its replacements: Aaron Bertrand'sAaron Bertrand's or my humble attempt.
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;