错误:sql语句嵌套太深在sql server中编译存储过程时

8yoxcaq7  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(337)

当我尝试在sql server 2016中编译一个非常大的存储过程时,出现以下错误:
msg 191,级别15,状态1,程序dm\u m\u proc,第9301行[批次开始第8行]
sql语句的某些部分嵌套太深。重写查询或将其分解为更小的查询。
所以这个错误出现在SQLServer本身(在编译存储过程时),我不认为它出现在我的sql代码中。
当我在过程中添加一个小部分时,问题就出现了。例如,添加以下内容会导致错误:

else if @user_id=0
    begin
        print 42 
    end

这将elseif的数量增加到225,但是它们不是嵌套的,它们都是单独的elseif语句,因此不会发生嵌套。
我认为存储过程的大小和else if语句的数量都没有最大值。
尽管。。当我在现有块中添加if语句时,该过程可以很好地编译。
任何帮助或暗示都非常感谢。

bogh5gae

bogh5gae1#

谢谢你的帮助,尤其是马丁·史密斯。我没有考虑过使用else if会嵌套。我用一个简单的测试脚本复制了这个错误。我得到了187个else-if语句和188个导致sql错误的语句。
现在我知道我可以做一个变通的原因了(只需要把这个过程分开)。动态sql可以很容易地解决这个问题,但除非绝对必要,否则我会尽量避免使用动态sql。

相关问题