すべてのデータベース内のすべてのストアド プロシージャのリストとそのスキーマ名を取得する方法についてアドバイスをいただけますか? ご意見ありがとうございます。
質問する
24284 次
4 に答える
12
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;
于 2013-03-31T02:45:33.940 に答える
4
すべてのデータベースについて、ユーザー定義のストアド プロシージャ、ビュー、関数、およびテーブル値関数を検索すると、次のことが役立つ場合があります (上記の Habo に基づく)。
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」を追加します。
于 2014-06-05T16:45:30.190 に答える
2
単一データベースの場合:
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
于 2013-03-31T00:51:36.317 に答える
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;
于 2014-08-02T19:32:33.400 に答える