SELECT [schema] = OBJECT_SCHEMA_NAME([object_id]),
name
FROM sys.procedures;
hoặc
SELECT [schema] = SCHEMA_NAME([schema_id]),
name
FROM sys.procedures;
Đối với một cơ sở dữ liệu cụ thể, trước tiên bạn có thể thay đổi ngữ cảnh cho cơ sở dữ liệu đó hoặc thay đổi một chút truy vấn của Marc (các truy vấn của tôi không tốt trong trường hợp này vì chúng dựa vào các hàm nhạy cảm với ngữ cảnh):
SELECT
SchemaName = s.name,
ProcedureName = pr.name
FROM
databasename.sys.procedures pr
INNER JOIN
databasename.sys.schemas s ON pr.schema_id = s.schema_id;
Nếu bạn muốn thực hiện việc này cho tất cả các cơ sở dữ liệu:
DECLARE @sql NVARCHAR(MAX) = N'';
SELECT @sql += N'
UNION ALL SELECT db = N''' + name + ''',
s.name COLLATE Latin1_General_CI_AI,
o.name COLLATE Latin1_General_CI_AI
FROM ' + QUOTENAME(name) + '.sys.procedures AS o
INNER JOIN ' + QUOTENAME(name) + '.sys.schemas AS s
ON o.[schema_id] = s.[schema_id]'
FROM sys.databases
-- WHERE ... -- probably don't need system databases at least
SELECT @sql = STUFF(@sql, 1, 18, '')
-- you may have to adjust ^^ 18 due to copy/paste, cr/lf, tabs etc
+ ' ORDER BY by db, s.name, o.name';
EXEC sp_executesql @sql;
Các mệnh đề đối chiếu là cần thiết trong trường hợp bạn có cơ sở dữ liệu với các đối chiếu khác nhau.