You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server 2016中无需枚举列生成指定XML输出的方法

SQL Server 2016 无需枚举列生成指定格式XML

方法1:XQuery转换原始XML

先将查询结果生成原生XML,再通过XQuery遍历所有列节点,重构为目标格式。

单行/多行通用示例

-- 替换为你的查询语句
DECLARE @SourceQuery NVARCHAR(MAX) = N'SELECT FirstName, LastName, Age FROM YourTable';
DECLARE @OriginalXML XML;

-- 执行查询生成原始XML
EXEC sp_executesql N'SELECT @Result = (' + @SourceQuery + ' FOR XML PATH(''Row''), ROOT(''Root''), TYPE)',
    N'@Result XML OUTPUT',
    @Result = @OriginalXML OUTPUT;

-- 转换为目标XML格式
SELECT
    @OriginalXML.query('
        for $row in /Root/Row
        return
            <Row>
                {
                    for $col in $row/*
                    return
                        <Answer name="{local-name($col)}">
                            <value>{data($col)}</value>
                        </Answer>
                }
            </Row>
    ') AS TargetXML;

此方案无需手动枚举列,XQuery会自动处理原始XML中的所有列节点,适配任意列数的查询结果。

方法2:动态SQL自动生成XML结构

通过系统视图sys.columns自动获取目标表的列名,动态拼接SQL生成目标XML,避免手动列枚举。

SQL Server 2016 兼容版本(替代STRING_AGG)

DECLARE @TableName NVARCHAR(128) = N'YourTable';
DECLARE @SQL NVARCHAR(MAX);

-- 动态拼接列对应的XML节点
SELECT @SQL = N'
SELECT
    ' + STUFF((
        SELECT N', <Answer name="' + QUOTENAME(c.name, '"') + '"><value>' + QUOTENAME(c.name) + '</value></Answer>'
        FROM sys.columns c
        WHERE c.object_id = OBJECT_ID(@TableName)
        ORDER BY c.column_id
        FOR XML PATH(''), TYPE
    ).value('.', 'NVARCHAR(MAX)'), 1, 2, '') + N'
FROM ' + QUOTENAME(@TableName) + N'
FOR XML PATH(''''), ROOT(''Answers'')';

-- 执行动态SQL生成XML
EXEC sp_executesql @SQL;

如果你的查询不是直接从单表读取,而是复杂查询,可将复杂查询结果存入临时表,再对临时表使用上述动态SQL逻辑。

内容的提问来源于stack exchange,提问作者AA23ds

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 22:42:39