执行一组存储过程

时间:2015-09-03 20:37:47

标签: sql sql-server stored-procedures

我正在尝试创建一个存储过程来执行模式中的所有存储过程。这就是我所拥有的:

EXEC ALL_IC.EXECUTE_ICS

运行它会选择字符串来执行所有存储过程,但它实际上并没有执行它们。

org.andengine.exception

如何通过运行该代码行来实际执行所有存储过程?

SQL Server 2012

2 个答案:

答案 0 :(得分:1)

除了令人想到的众多可怕的事情,实际的逻辑非常简单。您只需要构建一个动态字符串并执行它。

这是一种非常简单的方法。

declare @SQL nvarchar(max) = ''

select @SQL = @SQL + 'EXEC ' + quotename(s.name) + '.' + quotename(b.name) + ';'
from sys.procedures b
join sys.schemas s on s.schema_id = b.schema_id
where s.name = 'IC'

select @SQL
--exec sp_executesql @SQL

- 编辑 -

略有改动,因此架构在动态sql中没有硬编码。这样,如果您想要一个不同的模式,您只需更改模式名称,其他所有内容仍然有效。

- 第二次编辑 -

更改为使用QuoteName而不是[]中的硬编码。这更加灵活和稳定。

答案 1 :(得分:0)

为了确保您没有执行任何期望参数的过程,我在系统目录sys.parameters上添加了一些检查。剩下的就像你在问题中尝试的那样。

Declare @sql NVARCHAR(MAX);


SELECT @sql = STUFF((SELECT '  Exec ' + QUOTENAME(s.name) +'.'+ QUOTENAME(p.name) + ';  '
                FROM sys.procedures P 
                INNER JOIN sys.schemas S ON P.schema_id = S.schema_id
                WHERE s.name = 'IC' 
                 AND NOT EXISTS (SELECT 1 
                                  FROM sys.parameters pm
                                  WHERE p.object_id = pm.object_id)
                 FOR XML PATH('')),1,2,'');

Exec sp_executesql @sql