2016-03-04 39 views
0

我想根据各种输入测试30个存储过程,以查看是否有任何产生错误。存储过程共享相同的参数。当我在SSMS中运行它们(即使其中的几个)时,执行运行并且从未完成。看起来,也许他们正在平行运行并陷入服务器。我怎样才能在不需要手动执行的情况下连续执行存储过程?SQL Server Management Studio - 在系列中运行多个存储过程

DECLARE @spResult int; 
DECLARE @paramA int; 
DECLARE @paramB int; 
DECLARE @paramC int; 

set @paramA = 2013 
set @paramB = 1; 
set @paramC = 10; 

exec @spResult = rstoredProc1 @paramA ,@paramB ,@paramC 
exec @spResult = rstoredProc2 @paramA ,@paramB ,@paramC 
exec @spResult = rstoredProc3 @paramA ,@paramB ,@paramC 
exec @spResult = rstoredProc4 @paramA ,@paramB ,@paramC 
exec @spResult = rstoredProc5 @paramA ,@paramB ,@paramC 
... 
+1

在每个执行行后添加“GO”? – InitK

+0

我将不得不为每条线重新声明我的参数。根据另一个SO帖子,“任何变量声明,表变量等都不包含GO声明。” – PaulP

+1

它们不应该并行执行。只需在每一个之间放置一些打印语句以监视进度,并查看哪一个比预期花费的时间更长 – Jeremy

回答

2

很多方式去这一点。就我个人而言,我使用IF来保持迭代进行,如果我没有得到成功代码,我使用RETURN。在你的情况下,你可以做这样的事情:

EXEC @spResult = rstoredProc1 @paramA ,@paramB ,@paramC 
IF @spResult <> 0 
    RETURN 
ELSE 
    PRINT 'rstoredProc1 executed successfully' 

EXEC @spResult = rstoredProc2 @paramA ,@paramB ,@paramC 
IF @spResult <> 0 
    RETURN 
ELSE 
    PRINT 'rstoredProc2 executed successfully' 
+0

我原本完全使用您的代码,但没有看到打印语句。我只是意识到它们出现在消息选项卡中。我用SELECT替换了print语句,所以结果和消息显示在一个页面上。至少有一个存储过程使用上面的代码需要大量的时间(10分钟并且仍在运行)。但是,当在单独的查询窗口中运行时,它将在一秒或两秒内运行。你能想出任何可能发生的原因,因为它们不能并行执行吗? – PaulP

+0

可能有很多原因。我建议你使用'sp_who2'来查看是什么阻止它。或者更好,我强烈建议你下载并安装'sp_WhoIsActive' –

相关问题