【发布时间】:2019-06-29 00:54:29
【问题描述】:
如果表不存在,为什么 .query() 返回空字符串而不是 NULL?我是在 SQL 中查询 xml 的新手,所以我只是在玩,这是出乎意料的。
这是一个问题的例子。
declare @xml xml
set @xml = N'<xdoc><Header><OrderID>1234</OrderID><Detail><ProductID>12345</ProductID><Amount>12.50</Amount></Detail></Header></xdoc>'
SELECT
Tbl.Col.value('OrderID[1]', 'varchar(10)') as OrderID,
Tbl.Col.query('Detail') as Detail
FROM @xml.nodes('//Header') Tbl(Col)
set @xml = N'<xdoc><Header><OrderID>1234</OrderID></Header></xdoc>'
SELECT
Tbl.Col.value('OrderID[1]', 'varchar(10)') as OrderID,
Tbl.Col.query('Detail') as Detail
FROM @xml.nodes('//Header') Tbl(Col)
第一个 select 语句按预期返回。 Detail 字段是表头中表详细信息的 xml。
但是,在第二个 select 语句中,此标头记录没有明细表,因此我希望该字段为 null 而不是空字符串。
【问题讨论】:
-
XML 支持高度特定于供应商 - 所以请添加标签以指定您是否使用
mysql、postgresql、sql-server、oracle或db2- 或完全不同的东西。 -
query方法通常实现 [a part of]XQuery规范 w3.org/TR/xquery-31 没有 null 的概念。该方法仅在应用于 null sql xml 值(sql server)时才返回 null。
标签: sql sql-server xml xml-parsing