使用 CTE 获取 XML 路径的值

Yar*_*icx 0 sql t-sql sql-server

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

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

我用 Google 搜索并找到了解决方案,但该解决方案不使用 CTE。我必须使用公用表表达式对其进行 DataSrcCatIds 。

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)
Run Code Online (Sandbox Code Playgroud)

use*_*983 5

有点在黑暗中刺伤,但我你追求的是:

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,'');
Run Code Online (Sandbox Code Playgroud)