【发布时间】:2022-01-04 06:37:24
【问题描述】:
我有一个节点 (field2) 并不总是存在的 xml 文件。如果节点不存在,我想获得空值。
SELECT
field1, field2
FROM
(SELECT DISTINCT
xmlField1.value('text()[1]','VARCHAR(256)') AS field1,
xmlField2.value('text()[1]','VARCHAR(256)') AS field2
FROM
[dbo].XMLTable t
CROSS APPLY
[XMLData].nodes('/collection/test/field1') A(xmlField1)
CROSS APPLY
[XMLData].nodes('/collection/test/field2') B(xmlField2)) xmlData
如果我在 XML 文件中有两个字段,则此查询有效,但如果缺少 field2,则不会返回任何值。
【问题讨论】:
-
我没有使用 T-SQL 的经验,但是使用 PLSQL 并且出现了同样的问题。我所做的是,当值为 null 时,我只需将其替换为注释即可。
-
…OUTER APPLY [XMLData].nodes('/collection/test/field2') B…dbfiddle.uk/… -
旁白:切碎
.nodes('/collection/test')然后使用.value('field1/text()[1]'可能更容易且性能更高,因为这只需要一个.nodes -
提问时,您需要提供minimal reproducible example: (1) DDL 和样本数据填充,即 CREATE 表和 INSERT T-SQL 语句。 (2) 你需要做什么,即逻辑和你的代码尝试在 T-SQL 中实现它。 (3) 期望的输出,基于上述#1 中的样本数据。 (4) 您的 SQL Server 版本 (SELECT @@version;)。
标签: sql sql-server xml xquery