我记得读了一段时间后,它随机SQL Server可以减缓和/或采取一个愚蠢长的时间来执行存储过程时,它是这样写的:问题在SQL Server存储过程的参数
CREATE PROCEDURE spMyExampleProc
(
@myParameterINT
)
AS
BEGIN
SELECT something FROM myTable WHERE myColumn = @myParameter
END
解决这个错误的方法是做到这一点:
CREATE PROCEDURE spMyExampleProc
(
@myParameterINT
)
AS
BEGIN
DECLARE @newParameter INT
SET @newParameter = @myParameter
SELECT something FROM myTable WHERE myColumn = @newParameter
END
现在的问题是,首先是它不好的做法,遵循我的所有存储过程的第二个例子吗?这看起来像是一个可以在很少工作的情况下很容易防止的bug,但是这样做会有什么缺点,如果是的话,为什么?
当我读到这个问题时,相同的过程需要不同的时间来执行取决于参数的值,如果任何人都可以告诉我这个问题被称为/为什么会发生,我会非常感激,我似乎无法找到任何地方的帖子链接,这似乎是我们公司可能发生的问题。
我从来没有听说过一个问题,但如果是这样的话,可能是由于存储过程的预编译。也许在查询中使用参数会阻止优化存储过程。 – Russell
@Russell我有同样的意见。 –
@Russell它不是我曾经听说过的问题,我确实认为这是由于预编译而引起的,但我不记得确切的细节。我只是问现在,因为我移动了大量的查询到存储过程中,它似乎是一个可以很容易地阻止,即使它是一个罕见的bug工作很少 – Purplegoldfish