如何阻止存储过程使用已保存的执行计划?

时间:2014-04-17 16:09:54

标签: tsql sql-server-2012

我有一个存储过程,它接受xml输入,并且当xml参数明显不同时,似乎无法选择正确的执行计划。

我希望存储过程在每次执行时生成一个新的执行计划,所以当执行计划错误时,我不会得到糟糕的性能。

我可以使用什么命令来实现这一目标?

谢谢!

2 个答案:

答案 0 :(得分:1)

WITH RECOMPILE添加到存储过程定义中。

Reference

答案 1 :(得分:1)

在SP脚本中使用WITH RECOMPILE提示。

类似的东西:

CREATE PROCEDURE dbo.spname @par varchar(30) 
WITH RECOMPILE
AS
    Query logic        
GO

注意:RECOMPILE使用SP level会导致每次调用时重新编译SP,因此如果您知道SP中的哪一块导致了计划关联,您可以仅使用RECOMPILE提示而不是重新编译整个SP。

Link to MSDN DOC