常用表表达式-在谓词中使用变量

时间:2018-07-26 14:44:20

标签: sql-server-2008

我已经写了一个公用表表达式来返回层次信息,如果我将值硬编码到WHERE语句中,它似乎可以正常工作。如果我使用变量(即使该变量包含与硬编码值相同的信息),也会收到错误The maximum recursion 100 has been exhausted before statement completion.

通过一个简单的示例就可以更容易地看到它(注意,我没有包括CTE的实际代码只是为了使事情更清楚。如果您认为它有用,我当然可以添加它)。

这有效

WITH Blder
        AS
        (-- CODE IS HERE )

        SELECT
            *
        FROM Blder as b
        WHERE b.PartNo = 'ABCDE';

这会引发“最大递归错误”

DECLARE @part CHAR(25);
SET @part = 'ABCDE'

WITH Blder
AS
(-- CODE IS HERE )

SELECT
    *
FROM Blder as b
WHERE b.PartNo = @part;

我想念一些愚蠢的东西吗?还是在这种情况下,SQL引擎会以不同方式处理硬编码值和参数值?

1 个答案:

答案 0 :(得分:0)

请将分号放在变量赋值语句的末尾

SET @part ='ABCDE';