任何人都可以請一個方法來檢索所有存儲過程的列表及其模式名稱在所有數據庫中?感謝您的輸入!從SQL Server 2008中的所有數據庫獲取所有存儲過程
4
A
回答
10
CREATE TABLE #x(db SYSNAME, s SYSNAME, p SYSNAME);
DECLARE @sql NVARCHAR(MAX) = N'';
SELECT @sql += N'INSERT #x SELECT ''' + name + ''',s.name, p.name
FROM ' + QUOTENAME(name) + '.sys.schemas AS s
INNER JOIN ' + QUOTENAME(name) + '.sys.procedures AS p
ON p.schema_id = s.schema_id;
' FROM sys.databases WHERE database_id > 4
EXEC sp_executesql @sql;
SELECT db,s,p FROM #x ORDER BY db,s,p;
DROP TABLE #x;
1
對於單個數據庫:
select s.name + '.' + p.name as sproc_name_with_schema
from sys.procedures as p inner join
sys.schemas as s on s.schema_id = p.schema_id
你需要它爲所有的數據庫?你的問題有點不清楚。
declare @Sprocs as Table (DBName VarChar(64), SprocName VarChar(128))
insert into @Sprocs
execute sp_MSforeachdb N'use ?; select ''?'', s.name + ''.'' + o.name from sys.all_objects as o inner join sys.schemas as s on s.schema_id = o.schema_id where o.type = ''P'''
select * from @Sprocs
2
對於所有的數據庫,檢索用戶定義的存儲過程,視圖,函數和表值函數,以下可以幫助(基於哈博以上):
declare @Sprocs as Table (DBName VarChar(64), SchemaName varchar (128),
StoredProcName VarChar(128),
type varchar(10), type_desc varchar(128),
create_date datetime, modify_date datetime, is_MS_Shipped int)
insert into @Sprocs
execute sp_MSforeachdb N'use ?; select ''?'',
s.name as SchemaName, o.name as StoredProcName,
type, type_desc, create_date, modify_date, is_MS_Shipped
from sys.all_objects as o inner join sys.schemas as s
on s.schema_id = o.schema_id
where o.type in (''P'', ''V'', ''PC'', ''FN'', ''TF'')
and is_ms_shipped = 0'
select * from @Sprocs
where DBName not in ('master', 'tempdb', 'model', 'msdb', 'dba')
order by DBName, SchemaName, type, StoredProcName
添加'U'以獲得用戶生成的表格。
1
的替代方法的第一個答案沒有時態表和插入:
declare @sql varchar(max) = '';
select
@sql += ' ' +
'union all ' +
'select ''' +
dat.name + ''' as bas, b.name as sch, a.name as pro ' +
'from ' +
'[' + dat.name + '].[sys].procedures as a ' +
'inner join [' + dat.name + '].[sys].schemas as b on a.schema_id = b.schema_id'
from sys.databases as dat;
set @sql = RIGHT(@sql, LEN(@sql) - 11);
exec(@sql);
print @sql;
相關問題
- 1. SQL Server中的所有存儲過程都存儲在哪個數據庫中?
- 2. 從SQL Server 2008數據庫中選擇列中的所有值?
- 3. 編寫數據庫中所有存儲過程中的文本
- 4. 如何統計SQL Server中數據庫的所有存儲過程?
- 5. 從SQL Server 2008中的存儲過程中獲取XML
- 6. 從SQL Server存儲過程中存儲有用的數據
- 7. 搜索SQL存儲過程的所有數據庫
- 8. 如何在SQL Server數據庫中一次性刪除所有存儲過程?
- 9. 如何獲取SQL SERVER數據庫中所有表的行數
- 10. sql server - 使用存儲過程使用服務器上所有內存的存儲過程的數據庫
- 11. 查詢以獲取SQL Server 2008數據庫中所有表的名稱
- 12. 如何使用SQL Server 2008從我的數據庫中存儲的XML中讀取所有節點?
- 13. 在SQL Server中獲取所有數據庫大小的總和
- 14. SQL Server 2008存儲過程
- 15. 複製SQL Server 2008中的所有視圖,過程和函數
- 16. 在所有數據庫中搜索存儲過程/函數
- 17. Psycopg2沒有獲取數據庫中存在的所有數據
- 18. 如何從特定數據庫下載所有存儲過程
- 19. 刪除特定SQL Server架構中的所有存儲過程
- 20. 找到SQL Server 2000中的所有存儲過程和作業
- 21. 在SQL Server 2008中獲取所有非空列數
- 22. 如何在SQL數據庫中搜索所有存儲過程的文本
- 23. SQL查詢從所有數據庫中獲取數據
- 24. SQL Server 2008 - 專門從存儲過程中刪除數據
- 25. 顯示數據庫中的所有存儲過程
- 26. 解析數據庫中的所有存儲過程
- 27. NHibernate:獲取所有數據庫表中的所有數據
- 28. SQL從所有數據庫的所有表中獲取最大id值
- 29. 記錄SQL Server 2008 Express數據庫上的所有查詢?
- 30. 獲取所有redis數據庫中的所有密鑰和值?
請不要推薦sp_msforeachdb。它沒有記錄,不受支持,不靈活,可以跳過數據庫。 http://sqlblog.com/blogs/aaron_bertrand/archive/2010/12/29/a-more-reliable-and-more-flexible-sp-msforeachdb.aspx http://sqlblog.com/blogs/aaron_bertrand/archive /2010/02/08/bad-habits-to-kick-relying-on-undocumented-behavior.aspx http://www.mssqltips.com/sqlservertip/2201/making-a-more-reliable-and-flexible- spmsforeachdb / –