sql-server - 使用 FOR XML [SQL] 更改 Xml 的格式
问题描述
我在尝试在 SSMS 中生成 XML 实例时遇到问题,我使用 3 个视图生成 xml 文件,这是我编写的代码:
DECLARE @xmlDoc xml
SET @xmlDoc = (
SELECT *
FROM db.View1 AS v1
INNER JOIN db.View2 AS v2 ON v2.link = v1.link
INNER JOIN db.View3 AS v3 ON v3.link = v1.link
FOR XML AUTO)
SELECT @xmlDoc
我得到的是这种格式:
<v1 field="data" ...>
<v2 field="data" ...>
<v3 field="data" .../>
</v2>
</v1>
但我需要将 v2 和 v3 置于同一层级,如下所示:
<v1 field="data" ...>
<v2 field="data" .../>
<v3 field="data" .../>
</v1>
如果有人有任何想法,它将对我有很大帮助!谢谢 !
解决方案
在我们等待您的 (1) DDL 期间...
请尝试以下作为概念示例。
当您有来自不同表的嵌套 XML 时,您需要通过WHERE
子句连接它们。它模拟一个相关的子查询。
SQL
-- DDL and sample data population, start
DECLARE @tbl1 TABLE (ID INT PRIMARY KEY, [state] VARCHAR(20));
DECLARE @tbl2 TABLE (ID INT PRIMARY KEY, ParentID INT, [city] VARCHAR(20));
DECLARE @tbl3 TABLE (ID INT PRIMARY KEY, ParentID INT, [population] INT);
INSERT INTO @tbl1 (ID, state)
VALUES ( 1, 'Florida');
INSERT INTO @tbl2 (ID, ParentID, city)
VALUES (10, 1, 'Miami');
INSERT INTO @tbl3 (ID, ParentID, population)
VALUES (5, 1, 470914);
-- DDL and sample data population, end
SELECT v1.state AS [field]
, (SELECT v2.city AS [field]
FROM @tbl2 AS v2
WHERE v2.ParentID = v1.ID
FOR XML AUTO, TYPE
)
, (SELECT v3.population AS [field]
FROM @tbl3 AS v3
WHERE v3.ParentID = v1.ID
FOR XML AUTO, TYPE
)
FROM @tbl1 AS v1
FOR XML AUTO, TYPE;
输出
<v1 field="Florida">
<v2 field="Miami" />
<v3 field="470914" />
</v1>
推荐阅读
- python - 通过创建索引熊猫列表来删除数据框中的重复项
- oracle - ORA-00904: 尝试使用嵌套表执行 PL/SQL 存储过程时出现无效标识符错误
- python - 覆盖 txt 文件中的特定行
- jquery - jquery-csv 的完整设置列表
- javascript - 无法在 ReactJS 中的 Filter Value Datagrid Material-UI 上输入任何值
- python - 使用 map 预处理列表删除 doc2vec 的停用词而不丢失单词顺序
- python - 在 Dask 期货中映射 ndarray 的正确方法
- algorithm - 计算图中的生成树
- python - Simpy 和多处理池:为什么结果似乎有偏差
- django - 加载多个虚拟数据 dinago