sql-server - SQL Server - 根据数据输出 XML 节点结构
问题描述
请求帮助:我有一个要求,xml 输出需要低于所需的格式。主要障碍是获取动态 xml 节点<Shares1_1>
,该节点是关键字“Shares”与列 Shares 和 ID 中的数据连接。
期望的输出:
当前表结构和数据:
DROP TABLE IF EXISTS #TMP
CREATE TABLE #TMP(ID smallint, Shares VARCHAR(50), Name VARCHAR(50))
INSERT INTO #TMP(ID, Shares, Name)
VALUES (1,1,'John'), (2,1,'Tim'), (3,2,'Miles')
select * from #tmp
我尝试获取输出(不正确)
declare @xml xml
select @xml =(
select ID, Shares, Name
from #tmp
for xml path ('snap'),elements, xsinil, type
)
select @xml
提前感谢大家对此进行调查。
干杯。
解决方案
SQL Server 在设计上是声明性的。您将不得不使用动态 SQL 或一些字符串操作。
例子
Declare @S varchar(max) = ''
Select @S=@S+concat('<Shares',Shares,'_',ID,'>',B.XML,'</Shares',Shares,'_',ID,'>')
From #tmp A
Cross Apply ( Select A.* for XML path('') ) B(xml)
Declare @XML xml = convert(xml,concat('<Snap>',@S,'</Snap>'))
Select @XML
结果
<Snap>
<Shares1_1>
<ID>1</ID>
<Shares>1</Shares>
<Name>John</Name>
</Shares1_1>
<Shares1_2>
<ID>2</ID>
<Shares>1</Shares>
<Name>Tim</Name>
</Shares1_2>
<Shares2_3>
<ID>3</ID>
<Shares>2</Shares>
<Name>Miles</Name>
</Shares2_3>
</Snap>
推荐阅读
- c - For循环遍历数组导致无限循环
- c# - 从另一个线程读取结果时更新 DataTable
- python - 从列表中提取一定大小的字符串
- angular - 通过单击mat-table angular8中上一行的按钮动态添加行?
- swiftui - 将 NSManagedObject 与 SwiftUI 列表一起使用
- laravel - Laravel - 从 Chrome 运行功能并作为计划调用时的不同路径
- reactjs - TypeScript:你的意思是调用这个表达式吗?
- sed - 使用 sed 剪切日志文件
- python - 在时间机器上运行 python 脚本来复制文件
- keras - 类型错误:relu() 缺少 1 个必需的位置参数:'x'