Sql server 2008 从SQL Server 2008中的所有数据库获取所有存储过程
是否有人可以建议如何检索所有数据库中所有存储过程及其模式名称的列表?谢谢你的意见 对于单个数据库:Sql server 2008 从SQL Server 2008中的所有数据库获取所有存储过程,sql-server-2008,stored-procedures,Sql Server 2008,Stored Procedures,是否有人可以建议如何检索所有数据库中所有存储过程及其模式名称的列表?谢谢你的意见 对于单个数据库: 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 V
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
对于所有数据库,搜索用户定义的存储过程、视图、函数和表值函数,以下内容可能会有所帮助(基于上述Habo):
添加“U”以获得用户生成的表。不使用临时表和插入的第一个答案的替代方法:
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;
请不要推荐sp_msforeachdb。它没有文档记录,不受支持,不灵活,可以跳过数据库。如果需要列出CrRySalaRub函数和“IF”,如果需要SqLyInLyTabLyValueDype函数,请考虑添加类型筛选器“FS”
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
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;