0

我正在查看我们的一个 Web 应用程序中的一个错误,它正在调用一个存储过程,该过程负责更新数据库中的记录。

此存储过程已经运行了数周,没有出现任何问题。然后有一天它开始抛出错误,在调试时我们发现原因在存储过程中。

它基本上有这样的声明

Begin
  // Do Stuff

  Set
End

所以SET从来没有真正设置任何东西。出于某种原因,这在我们的服务器上运行良好,并且在客户端服务器上运行良好,直到今天早些时候它决定开始抱怨。(不正确的语法错误)

是否有任何类型的 SQL Server 设置会导致这种突然的行为变化?

澄清-SET一直在程序中。并且单独运行 aSET或作为存储过程中的唯一语句实际上对我有用。这是问题,它不应该工作。那么,当它应该失败时,有什么东西会导致它工作吗?

4

2 回答 2

3

具有SET类似的过程通常无法编译,即使SET无法达到:

alter procedure dbo.testproc as
    begin
    return 1;
    set
    end

Incorrect syntax near the keyword 'SET'.

由于更改失败,我看不到该过程如何最终出现在您的数据库中?

或者您可能在 SQL Server 2000 的兼容模式下运行(它仍然允许这样做)。将兼容性 mdoe 更改为 SQL Server 2005 或更高版本会中断该过程。

于 2009-12-07T19:04:19.550 回答
2

单独执行“SET”会产生错误。我最初打算建议您可能有导致该行永远无法到达的分支代码(IF、RETURN、GOTO 等)......但我发现我无法创建包含此作为标准的存储过程-单独声明。

如果您编写程序并尝试重新创建它(使用不同的名称),可以创建它吗?

可能值得发布该脚本,或者尽可能多地公开。

于 2009-12-07T18:46:09.353 回答