代码之家  ›  专栏  ›  技术社区  ›  Brandon

为什么尾随集在SQL中不一致地引发错误?

  •  0
  • Brandon  · 技术社区  · 15 年前

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

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

    基本上有这样的说法

    Begin
      // Do Stuff
    
      Set
    End
    

    所以 SET 从来没有设置过任何内容。出于某种原因,这在我们的服务器上运行得非常好,在客户机服务器上运行得很好,直到今天早些时候它决定开始抱怨。(语法错误)

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

    澄清 - 集合 一直都在程序中。运行一个 集合 它本身,或者作为存储过程中的唯一语句,实际上对我有用。这就是问题所在。 不应该 工作。那么,当它应该失败时,是否有什么东西会导致它工作?

    2 回复  |  直到 15 年前
        1
  •  3
  •   Andomar    15 年前

    具有 SET 像这样,即使 集合 无法联系:

    alter procedure dbo.testproc as
        begin
        return 1;
        set
        end
    
    Incorrect syntax near the keyword 'SET'.
    

    由于alter失败了,首先我看不到该过程是如何在数据库中结束的?

    或者您正在SQL Server 2000的兼容模式下运行(这仍然允许这样做)。将兼容MDOE更改为SQL Server 2005或更高版本将破坏该过程。

        2
  •  2
  •   Philip Kelley    15 年前

    单独执行“set”将产生错误。我本来打算建议您使用分支代码(ifs、returns、goto等),这会导致永远无法到达行…但我发现无法创建将此作为独立语句包含的存储过程。

    如果编写过程脚本并尝试重新创建(使用其他名称),是否可以创建该过程?

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

    推荐文章