sql-server - 如何在 SQL 中分解具有相同子子名称的两个 xml 标签

标签 sql-server xml t-sql xpath for-xml

我创建了一个脚本,它从 SQL 中的表中获取数据并生成 XML 输出。 2 个标签的父标签、子标签和子标签都是相同的。 SQL 脚本将它们作为一个 XML 值而不是 2 个输出。

 SELECT
 Request.TransactionRef AS [RequestHeader/RequestID],
'Deal.Trial' AS [RequestHeader/Action],
'DoDealValidate' AS [RequestHeader/ActionFlags/Flag],
'DoDealDerive' AS [RequestHeader/ActionFlags/Flag] 

当前结果是:

<ActionFlags>
<Flag>DoDealValidateDoDealDerive</Flag>
</ActionFlags>




<ActionFlags>
<Flag>DoDealValidate</Flag>
<Flag>DoDealDerive</Flag>
</ActionFlags>

最佳答案

只需在中间放置一些的东西即可:

SELECT
 'blah' AS [RequestHeader/RequestID],
'Deal.Trial' AS [RequestHeader/Action],
'DoDealValidate' AS [RequestHeader/ActionFlags/Flag],
NULL AS [RequestHeader/ActionFlags],
'DoDealDerive' AS [RequestHeader/ActionFlags/Flag] 
FOR XML PATH('row');

背景:

引擎正在运行 SELECT 的列,并一个接一个地构建它们。

  • 嗯,有一个<RequestHeader>打开
  • 有一个 <RequestID>打开
  • 再次<RequestHeader> ,仍然开放,没什么可做的
  • <Action>下面...哦,我们必须关闭<RequestID>并打开一个新的<Action>
  • 等等...

在您的代码中 <Flag>仍然是打开的,因此内容被写入打开的元素中。

我的改变会让引擎思考

  • 啊,我们上升了一级,所以我们关闭了 <Flag>首先...哎呀,没什么可写的...
  • 现在有东西给 <Flag> ,已经不开放了,我们必须重新开放一个(新)<Flag>节点
  • 等等...

关于sql-server - 如何在 SQL 中分解具有相同子子名称的两个 xml 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57804930/

相关文章:

sql - 将服务器名称设置为变量

java - XML 到 Java 对象

t-sql - 用于比较日期的 SQL 查询的正确语法

sql - 动态 SQL 存储过程不填充临时表

t-sql - 如何在使用 SELECT DISTINCT 和 MAX(ID) 删除重复项时显示表中的所有列?

mysql - 消息 7391 : linked server unable to begin a distributed transaction (both svrs running locally)

sql - 使用 GROUP BY 和聚合条件进行删除

sql-server - 如何使用 SQL Server 进行数据透视表?

c# - X文档 : get the first child element of type 'a' or 'b'

java - 如何使用 XStream 反序列化属性和文本节点?