sql-server - 将 XML 显式查询设置为变量

标签 sql-server sql-server-2008 tsql

我需要在 SQL 中生成以下 XML 字符串并将其分配给一个变量。

<List>
   <V Value="TESt">
       <Target a="10" b="11"/>
   </V>
   <T Value="TESt1">
       <Target a="100" b="101"/>
   </V>
</List>

因此,我编写了以下 SQL 代码:

;WITH XML_CTE AS
(
SELECT 
    1 AS TAG,
    NULL AS Parent,
    UT.title AS [v!1!Value],
    null AS [Target!2!a],
    null AS [Target!2!b]
FROM 
(
    select  
        10 AS A,
        11 AS B,
        'TESt' as title
    union
        select  
        100 AS a,
        101 AS b,
        'TESt1' as title
)UT
UNION ALL
SELECT
    2,
    1,
    UT.title AS Value,
    ut.a,
    ut.b
FROM
(
    select  
        10 AS a,
        11 AS b,
        'TESt' as title
    union
        select  
        100 AS a,
        101 AS b,
        'TESt1' as title
)ut
)
SELECT * FROM XML_CTE 
ORDER BY 
    [V!1!Value], 
[Target!2!a]
FOR XML EXPLICIT, ROOT('List')

但是如何将它分配给 xml(或 nvarchar)变量?由于“UNION ALL”,我必须将其包装在 CTE 中,但是将其放在 CTE 中,我无法将其分配给变量。

最佳答案

您可以将 SELECT * FROM XML_CTE... 语句更改为以下内容

SELECT @MyVariable = 
    (SELECT * FROM XML_CTE 
    ORDER BY 
        [V!1!Value], 
    [Target!2!a]
    FOR XML EXPLICIT, ROOT('List')
    )

关于sql-server - 将 XML 显式查询设置为变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14386650/

相关文章:

sql - 如何使用计算列的 sql 函数从 XML 中检索值

.net - LINQ 查询与存储过程

sql - 总和列以显示每一行的总数

sql - 是否可以通过堆叠数据库来绕过 SQL Server Express 的大小限制?

c# - 在表更新时,在我的 .NET 代码中触发一个操作

sql 查询 - true => true, false => true 或 false

sql-server - SQL 查询迭代计划作业并将其删除。存储过程将 Job_Name 作为输入参数

sql - APPLY 右侧的聚合无法引用左侧的列

SQL Server 继续计算行数

c# - SQL 阅读器正在读取空行?