当前位置: 首页 > 面试题库 >

来自局部变量的MAXRECURSION值

郭意
2023-03-14
问题内容

我正在SQL Server 2005中编写一个存储过程,该存储过程声明了一个名为的CTE(公用表表达式)foo

foo递归地调用自身,但是当SP的参数之一(@bar)为null时无限循环。

为了停止这个无限循环,我一直在尝试使用该选项MAXRECURSION

  • @bar为null时,将MAXRECURSION设置为1;
  • @bar不为null时,将MAXRECURSION设置为0(无限制)。

因此,我声明了一个局部变量@maxrec,该变量取1或0,具体取决于是否@bar为null。

DECLARE @maxrec INT;
SET @maxrec = 0;
if (@dim_course_categories is null)
begin
    SET @maxrec = 1;
end

;WITH foo AS (
    ...
)

SELECT * FROM foo
OPTION (MAXRECURSION @maxrec)

解析代码时,出现以下错误: Incorrect syntax near '@maxrec'.,它指向line OPTION (MAXRECURSION@localvar)

那我在做什么错?是否禁止在OPTION子句中使用局部变量?


问题答案:

一种选择是建立查询,然后执行 EXEC sp_executesql

DECLARE @Query NVARCHAR(MAX)

SET @Query = N'
    ;WITH foo AS (
        ...
    )

    SELECT * FROM foo
    OPTION (MAXRECURSION ' + CAST(@maxrec AS NVARCHAR) + ');'

EXEC sp_executesql @Query

附带说明一下,如果在MAXRECURSION语句完成之前已达到该值,则查询将无法正常结束,它将引发异常。那可能就是您想要的,但是要意识到这一点。



 类似资料:
  • 主要内容:局部变量,全局变量,局部变量和全局变量的综合示例在《 C语言形参和实参的区别》中提到,形参变量要等到函数被调用时才分配内存,调用结束后立即释放内存。这说明形参变量的作用域非常有限,只能在函数内部使用,离开该函数就无效了。 所谓 作用域( Scope ) ,就是变量的有效范围。 不仅对于形参变量,C语言中所有的变量都有自己的作用域。决定变量作用域的是变量的定义位置。 局部变量 定义在函数内部的变量称为 局部变量(Local Variable) ,

  • Lua 的设计有一点很奇怪,在一个 block 中的变量,如果之前没有定义过,那么认为它是一个全局变量,而不是这个 block 的局部变量。这一点和别的语言不同。容易造成不小心覆盖了全局同名变量的错误。 定义 Lua 中的局部变量要用 local 关键字来显式定义,不使用 local 显式定义的变量就是全局变量: g_var = 1 -- global var local l_va

  • 简介 在前面的章节中,我已经讲述了如何定义函数。在本节中,我讲介绍局部变量,这将会使定义函数变得更加容易。 let表达式 使用let表达式可以定义局部变量。格式如下: (let binds body) 变量在binds定义的形式中被声明并初始化。body由任意多个S-表达式构成。binds的格式如下: [binds] → ((p1 v1) (p2 v2) ...) 声明了变量p1、p2,并分别

  • 局部变量用于模版渲染,也就是模版中的 site 变量。 默认变量 变量 描述 posts 所有文章 pages 所有分页 categories 所有分类 tags 所有标签 获取变量 hexo.locals.get('posts') 设置变量 hexo.locals.set('posts', function(){ return ... }); 移除变量 hexo.locals.remove(

  • 问题内容: 我了解Python中局部变量和全局变量的概念,但是我只是有一个问题,为什么下面的代码中会出现错误?Python逐行执行代码,因此在读取第5行之前,它不知道a是局部变量。Python尝试执行第5行后,会回退一行并将其标记为错误吗? 问题答案: 设置和测试 为了分析您的问题,让我们创建两个独立的测试函数来复制您的问题: 版画。因此,调用此函数不是问题,而是在下一个函数上: 我们收到一个错误

  • 问题内容: 我还是Python的新手,我一直在尝试提高Python脚本的性能,因此我在有或没有全局变量的情况下对其进行了测试。我给它计时,令我惊讶的是,它在声明了全局变量的情况下运行得更快,而不是将局部变量传递给函数。这是怎么回事?我以为局部变量的执行速度更快?(我知道全球人并不安全,我仍然很好奇。) 问题答案: 当地人应该更快 根据此页面上的本地人和全球人: 当一行代码要求输入变量x的值时,Py