如何将T-SQL查询生成的XML结果拆分为多行?
解决SQL Server XML查询结果无换行的问题
嘿,这个问题我之前帮不少开发者处理过!当你用FOR XML PATH('row')查询时,SQL Server默认会输出紧凑格式的XML——所有元素都挤在一行里,可读性极差。下面给你几个实用的解决方案,适配不同的场景:
方法1:用INDENT参数(SQL Server 2016+)
这是最简单的方案,SQL Server 2016及之后的版本支持直接在FOR XML语句里加INDENT参数,自动给XML添加换行和缩进:
SELECT TOP 1000 id, forename, surname FROM [datagen] FOR XML PATH ('row'), INDENT;
这个参数会让生成的XML自动按层级换行,结构一目了然,完全不用手动拼接。
方法2:手动添加换行符(兼容旧版本)
如果你的SQL Server版本低于2016,可以通过手动插入换行符(CHAR(13)+CHAR(10)对应Windows换行,CHAR(10)对应Linux换行)来格式化XML:
SELECT '<row>' + CHAR(13)+CHAR(10) + ' <id>' + CAST(id AS VARCHAR(20)) + '</id>' + CHAR(13)+CHAR(10) + ' <forename>' + forename + '</forename>' + CHAR(13)+CHAR(10) + ' <surname>' + surname + '</surname>' + CHAR(13)+CHAR(10) + '</row>' + CHAR(13)+CHAR(10) FROM [datagen] FOR XML PATH(''), TYPE;
FOR XML PATH('')用来拼接所有行的XML字符串TYPE参数确保输出是原生XML类型,避免特殊字符被转义- 手动添加的
CHAR(13)+CHAR(10)会在指定位置插入换行,用来做缩进
方法3:在SSMS里直接格式化显示
如果你只是在SQL Server Management Studio(SSMS)里查看结果,不用修改查询也能实现换行:
- 右键查询窗口,选择「查询选项」
- 依次进入「结果」→「XML」
- 勾选「将结果显示为格式化的XML」
这样即使你用原来的查询,SSMS也会自动帮你把XML格式化成带换行和缩进的样式。
内容的提问来源于stack exchange,提问作者kevin dockerty
相关产品推荐
相关产品推荐

