我有一个存储过程,大约需要20秒才能运行代码。当我将代码直接复制到SSMS中时,它运行在< 1秒。现在的复杂性是我的代码实际上运行了20个其他存储过程 - 除了调用其他存储过程之外,主存储过程根本没有做太多工作。
我已阅读参数嗅探,并已更改我的代码以处理此问题,没有任何影响。我还尝试了“with recompile”提示调用主存储过程以及调用所有其他存储过程,这使得它变慢。
还有什么呢?
所以我的调用存储过程如下所示:
CREATE PROCEDURE [dbo].[spr_DoPersonMatch]
@inPmq_ID bigint -- Passed in pending match ID
AS
BEGIN
SET NOCOUNT ON;
declare @pmq_ID bigint
set @pmq_ID = @inPmq_ID
declare @Total_match_count as int = 0
declare @match_rule as int
declare @AuditMatch as bit = 0
-- Match Rule 1 - FORENAME & SURNAME & NINO & either (NHSNO or UPN)
exec dbo.spr_DoPersonMatchRule1 @pmq_ID,@AuditMatch ,@match_count = @Total_match_count output
if @Total_match_count > 0 set @match_rule = 1
-- Match Rule 2 - FORENAME & SURNAME & NINO & either (NHSNO or UPN)
if @Total_match_count < 1 -- If we have a match, do not do any more matches. Drop through
BEGIN
exec dbo.spr_DoPersonMatchRule2 @pmq_ID,@AuditMatch ,@match_count = @Total_match_count output
if @Total_match_count > 0 set @match_rule = 2
END
正如我所说,如果我将上面的主存储过程代码复制到SSMS中并运行它(在代码顶部设置inPmq_ID
),它会立即运行。
我缺少什么?
答案 0 :(得分:0)
您确定在SSMS中实际执行SPROC吗?我看到程序员忘记实际执行CREATE PROCEDURE脚本而不是底层存储过程的错误。阅读你的帖子说“如果我将...代码复制到SSMS” - 如果你确实这样做了,你的查询将构建proc,但不会执行它。