Obtenez toutes les procédures stockées à partir de toutes les bases de données dans SQL Server 2008
Quelqu'un peut-veuillez fournir des conseils sur la façon de récupérer une liste de toutes les procédures stockées avec leurs noms de schéma dans la base de données? Merci pour vos commentaires!
CREATETABLE#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 >4EXEC sp_executesql @sql;SELECT db,s,p FROM#x ORDERBY db,s,p;DROPTABLE#x;
Pour toutes les bases de données, de recherche définis par l'utilisateur des procédures stockées, vues, fonctions, et les fonctions de table, les éléments suivants peuvent aider (basé sur Habo ci-dessus):
declare@Sprocs asTable(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)insertinto@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 notin('master','tempdb','model','msdb','dba')orderby DBName, SchemaName, type, StoredProcName
Ajouter 'U' pour obtenir généré par l'utilisateur des tables.
select s.name +'.'+ p.name as sproc_name_with_schema
from sys.procedures as p innerjoin
sys.schemas as s on s.schema_id = p.schema_id
Avez-vous besoin pour toutes les bases de données? Votre question est un peu floue.
declare@Sprocs asTable( DBName VarChar(64), SprocName VarChar(128))insertinto@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
Une alternative à la première réponse sans temporelle de la table et inserts:
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;
OriginalL'auteur Aaron Bertrand
Pour toutes les bases de données, de recherche définis par l'utilisateur des procédures stockées, vues, fonctions, et les fonctions de table, les éléments suivants peuvent aider (basé sur Habo ci-dessus):
Ajouter 'U' pour obtenir généré par l'utilisateur des tables.
OriginalL'auteur WCN
Pour une base de données unique:
Avez-vous besoin pour toutes les bases de données? Votre question est un peu floue.
OriginalL'auteur HABO
Une alternative à la première réponse sans temporelle de la table et inserts:
OriginalL'auteur batressc