SQL Server Management Studio - 在系列中运行多个存储过程
我想根据各种输入测试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
...
有很多方式去这一点。就我个人而言,我使用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'
我原本完全使用您的代码,但没有看到打印语句。我只是意识到它们出现在消息选项卡中。我用SELECT替换了print语句,所以结果和消息显示在一个页面上。至少有一个存储过程使用上面的代码需要大量的时间(10分钟并且仍在运行)。但是,当在单独的查询窗口中运行时,它将在一秒或两秒内运行。你能想出任何可能发生的原因,因为它们不能并行执行吗? – PaulP
可能有很多原因。我建议你使用'sp_who2'来查看是什么阻止它。或者更好,我强烈建议你下载并安装'sp_WhoIsActive' –
在每个执行行后添加“GO”? – InitK
我将不得不为每条线重新声明我的参数。根据另一个SO帖子,“任何变量声明,表变量等都不包含GO声明。” – PaulP
它们不应该并行执行。只需在每一个之间放置一些打印语句以监视进度,并查看哪一个比预期花费的时间更长 – Jeremy