2013-03-30 3 views

답변

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 
+1

이 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 / –

2

는 다음을 도와 (위 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'를 추가하여 사용자 생성 표를 가져옵니다.

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; 
관련 문제