- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有两个不同的 XML 片段要放在一起。
例如,第一部分的 SQL 如下所示:
SELECT
*
FROM
(
SELECT 1 AS OrdNum, 'Abc' AS Name
) a
FOR XML
AUTO,
TYPE
一旦执行,你会得到这个:
<a OrdNum="1" Name="Abc" />
第二个在这里:
SELECT
*
FROM
(
SELECT 4 AS Age, 'M' AS Sex, 'John' AS FirstName
) b
FOR XML
AUTO,
TYPE
你会得到这个:
<b Age="4" Sex="M" FirstName="John" />
现在我将把这两部分放在一起:
SELECT
*
FROM
(
SELECT
(
SELECT
*
FROM
(
SELECT 1 AS OrdNum, 'Abc' AS Name
) a
FOR XML
AUTO,
TYPE
) AS aa
,
(
SELECT
*
FROM
(
SELECT 4 AS Age, 'M' AS Sex, 'John' AS FirstName
) b
FOR XML
AUTO,
TYPE
) AS bb
) Data
FOR XML
AUTO,
ELEMENTS
结果如下:
<Data>
<aa>
<a OrdNum="1" Name="Abc" />
</aa>
<bb>
<b Age="4" Sex="M" FirstName="John" />
</bb>
</Data>
但我不想让元素“aa”和“bb”出现在那里。我很想得到这个:
<Data>
<a OrdNum="1" Name="Abc" />
<b Age="4" Sex="M" FirstName="John" />
</Data>
但我不知道如何实现。
有什么提示吗?
最佳答案
没有“简单”的方法可以做到这一点。 FOR XML PATH|EXPLICIT|AUTO
将要求每个顶级输出元素具有相同的名称。而且您不能将多个 FOR XML
查询联合在一起 (Sql Server 2012)。
你去的方向是最可靠和灵活的。本质上,您必须为要包含的每个不同元素类型添加一个单独的列。您可以简化对此的最终尝试以获得您想要的东西:
SELECT
(
SELECT 1 AS [@OrdNum], 'Abc' AS [@Name]
WHERE 1=1
FOR XML PATH ('a'), TYPE
)
,
(
SELECT 4 AS [@Age], 'M' AS [@Sex], 'John' AS [@FirstName]
WHERE 1=1
FOR XML PATH ('b'), TYPE
)
FOR XML PATH ('Data'), TYPE;
以上查询输出:
<Data>
<a OrdNum="1" Name="Abc" />
<b Age="4" Sex="M" FirstName="John" />
</Data>
当您使用 FOR XML PATH
时,列别名是 XPath。因此,要使其成为属性名称,您必须以“@”为前缀——这要求您转义别名(因此是 []
)。 PATH
上的参数指示每一行的 Xml 元素的名称。 TYPE
选项表示将输出保持为 Xml 类型而不是 nvarchar(max),这意味着外部查询可以更好地合并它。外部查询只有 2 列可以填充到它所代表的单个元素中。最后,我喜欢 WHERE 1=1
,但它在语法上不是必需的。
切线:我知道您的示例已简化,因此您可能希望知道 Xml 数据类型可以应用“方法”。例如,假设您想要上述内容,但外部查询只需要“b”元素。您可以使用 query()
方法仅选择 Xml 的部分内容以合并到某些外部查询中。
SELECT
(
SELECT
(
SELECT 1 AS [@OrdNum], 'Abc' AS [@Name]
WHERE 1=1
FOR XML PATH('a'), TYPE
)
,
(
SELECT 4 AS [@Age], 'M' AS [@Sex], 'John' AS [@FirstName]
WHERE 1=1
FOR XML PATH('b'), TYPE
)
FOR XML PATH('Data'), TYPE
).query('Data/b');
产生这个:
<b Age="4" Sex="M" FirstName="John" />
关于sql-server - SQL Server SELECT FOR XML 如何获取同一级别的两个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23788495/
我是一名优秀的程序员,十分优秀!