我是否需要“停机”来更新存储过程?(由于“定义已更改”错误)

Vac*_*ano 8 sql-server stored-procedures sql-server-2012

我一直认为更新存储过程是我可以在用户积极使用系统时做的事情。

但是我目前正在测试对存储过程的更新,并且在执行对 sproc 的长时间运行调用时(调用时间超过 4 分钟),我更新了 sproc。(我打算在单独的窗口中尝试不同的查询计划。)

当我回到长期运行的时候,我遇到了这个错误:

The definition of object 'MySprocName' has changed since it was compiled.
Run Code Online (Sandbox Code Playgroud)

此错误似乎表示,如果更新该 sproc 的定义,则任何正在主动执行的 sproc 都会失败。(我认为一旦 sproc 开始运行,它会在剩余的运行中使用该计划,尽管定义发生了变化。)

这是真的?我是否需要停机来更新 sproc 的定义?

Ran*_*est 1

是的,您确实不应该更改正在运行的存储过程,因为 SQL Server 不喜欢它。

至于停机时间,是的,作为最佳实践,您不应该在繁忙的生产环境中在工作时间对常用的存储过程进行更改。