- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在 SQL Server 2005 中编写一个存储过程,它声明一个名为 foo
的 CTE(公用表表达式)。
foo
递归调用自身,但当 SP 的参数之一 (@bar
) 为空时无限循环。
为了停止这个无限循环,我一直在尝试使用选项 MAXRECURSION
:
@bar
为null时,设置MAXRECURSION为1;@bar
不为空时,将 MAXRECURSION 设置为 0(无限制)。所以我声明了一个局部变量 @maxrec
,它根据 @bar
是否为 null 取值 1 或 0。
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)
当我解析代码时,出现以下错误:“@maxrec”附近的语法不正确。
,它指的是 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
值,查询将不会正常结束,它会抛出异常。这可能是您想要的,但请注意这一点。
关于sql - 来自局部变量的 MAXRECURSION 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11424497/
我正在 SQL Server 2005 中编写一个存储过程,它声明一个名为 foo 的 CTE(公用表表达式)。 foo 递归调用自身,但当 SP 的参数之一 (@bar) 为空时无限循环。 为了停止
我想在 SQL 中创建一个 View ,因为 tableau 软件不支持 CTE 功能。我无法添加 View ,因为我正在使用 MAXRECURSION。错误信息是 Incorrect syntax
我有一个查询耗尽了默认值 MAXRECURSION限制为 100。给我以下错误消息: The statement terminated. The maximum recursion 100 has b
我有这个函数,给定初始日期和最终日期,给出该范围内相应的年/月: CREATE FUNCTION [dbo].[fnYearMonth] ( @Initial Date, @Final
我在声明 TVF 内的 CTE 的 maxrecursion 选项时遇到问题。 这是 CTE(一个简单的日历): DECLARE @DEBUT DATE = '1/1/11', @FIN DATE
我有一个 SqlServer 函数,它根据输入执行循环选择和 cte,输入是一个带有 id 的 csv 字符串。 不幸的是,我不能在我的函数中使用“option(maxrecursion 0)”,它必
我是一名优秀的程序员,十分优秀!