使用CTE为XML路径获取价值

时间:2018-12-05 20:22:58

标签: sql sql-server tsql

我尝试将数据获取到@DataSrcCatIds变量中。但是SQL Server抛出错误

  

ASSIGNMENT语句中不允许使用FOR XML子句

我已经搜索过Google,并且找到了解决方案,但是该解决方案未使用CTE。我必须使用通用表表达式来实现它。

CTE有什么解决方案吗?

谢谢

DECLARE @DataSrcCatIds AS NVARCHAR(MAX)

;WITH CatTree (CategoryId ) AS
(
    SELECT CategoryId FROM Categories
    WHERE SefLink='my-link'
    UNION ALL
    SELECT ct.CategoryId
    FROM Categories ct
    INNER JOIN CatTree AS parent ON parent.CategoryId = ct.ParentCatId
)
SELECT @DataSrcCatIds = DataSrcCatIds + ',' 
FROM Categories c
JOIN CatTree ct ON ct.CategoryId = c.CategoryId
FOR XML PATH ('')

SET @DataSrcCatIds = LEFT(@DataSrcCatIds, LEN(@DataSrcCatIds) - 1)

1 个答案:

答案 0 :(得分:4)

在黑暗中有点刺伤,但我假设你在追捕:

DECLARE @DataSrcCatIds AS NVARCHAR(MAX);

WITH CatTree (CategoryId ) AS
(
    SELECT CategoryId FROM Categories
    WHERE SefLink='my-link'
    UNION ALL
    SELECT ct.CategoryId
        FROM Categories ct
    INNER JOIN CatTree as parent ON parent.CategoryId = ct.ParentCatId
)
SELECT @DataSrcCatIds = STUFF((SELECT ',' + DataSrcCatIds
                               FROM Categories c
                                    JOIN CatTree ct ON ct.CategoryId =c.CategoryId
                               FOR XML PATH ('')),1,1,'');