SQL - 递归CTE - 类型与锚点和递归部分之间不匹配

时间:2017-05-16 10:05:25

标签: sql recursion common-table-expression

我正在尝试使用SQL中的递归CTE创建物料清单。但是,我遇到匹配类型的问题,我无法解释原因。我已经看过几个有同样问题的人的线程,但我得到的唯一想法是转换为相同的类型。这适用于列数量但不适用于零件和位置,如下所示。

WITH iterate (Module, Part, Description, Quantity, Position)
AS (
    SELECT DISTINCT
        @item, CAST(@item AS VARCHAR(100)), parts.Description, CAST(1 AS DECIMAL), CAST(NULL AS VARCHAR(100))
    FROM (ProductItems AS parts
        INNER JOIN ObjectReference AS ref
        ON parts.Item = @item)
    UNION ALL
    SELECT
        @item, CAST(parts.Item AS VARCHAR(100)), parts.Description, CAST(ref.Qty AS DECIMAL), CAST(ref.Pos AS VARCHAR(100))
    FROM iterate
        INNER JOIN ObjectReference AS ref
        ON ref.Child = iterate.module
        INNER JOIN ProductItems AS parts
        ON ref.Parent = parts.Item
    )
SELECT TOP 1000 *
FROM iterate

我收到以下两条错误消息:

  • 在递归查询“iterate”的“Part”列中,锚和递归部分之间的类型不匹配。

  • 在递归查询“iterate”的“位置”列中,锚和递归部分之间的类型不匹配。

您对此有解释并提供可能的解决方案吗?

我将非常感激。谢谢!

干杯, 斯蒂芬

0 个答案:

没有答案