sql - Xquery 将 XML 标签解析为列

标签 sql sql-server xml t-sql xpath

我有下面的 XML 片段作为表中 XML 列的一部分,例如 MyTable

<policystatusdetail id="XXXXXXXXXXXXXXX">
<CurrentUser>ABCDEFG</CurrentUser>
<LastModifiedDateTime>2016-04-02T17:03:01.761</LastModifiedDateTime>
<PolicyStatus>Quote-New-Pending</PolicyStatus>
</policystatusdetail>

我只想提取 PolicyStatus 作为列。

我正在使用以下查询

Select x.r.value('@PolicyStatus','varchar(500)') as PolicyStatus 
from 
(Select cast(XMLData as XML) XMLData from Mytable) s
cross apply s.XMLData.nodes('session/data/policyAdmin/policyStatusdetail') as x(r)

但它返回零行。有人可以帮忙吗?

最佳答案

有几个缺陷:

  • XML 严格区分大小写。您的/policyStatusdetail 找不到 <policystatusdetail>

  • 您自己的查询显示,必须有更多:.nodes('session/data/policyAdmin/policyStatusdetail')

  • CAST您使用 ( Select cast(XMLData as XML) ) 显示,该 XML 可能存储在非 XML 列中。实际的数据类型是什么?

  • 我们无法知道该节点是否只出现一次。由于 XML 越大,显然它们可能会更多?

如果您确实只需要第一次出现 <PolicyStatus> ,就不需要其他任何东西这可以非常简单地完成:

SELECT CAST(XMLData AS XML).value('(//PolicyStatus)[1]','nvarchar(max)') AS PolicyStatus
FROM Mytable

//开头将触发深度搜索并找到具有给定名称的第一个元素...

关于sql - Xquery 将 XML 标签解析为列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41134816/

相关文章:

sql - 这是 Coldfusion 查询 SQL 注入(inject)证明吗?

sql - MS Access 中附加条件的左连接

SQL Server 导入和导出向导在带有临时表的存储过程中给出无效对象错误

sql - 在 SQL 中查找某人的年龄

android - 使用自定义 xml View 在 Android 中创建一个 AlertDialog

xml - 如何简化这个 xproc 管道?

c# - 该表有一列带有复选框,需要选择该行并将行发送到另一个表。

mysql - 按照 mysql 中的模式更新多行

sql-server - 在这种情况下 READ UNCOMMITTED/NOLOCK 安全吗?

php - 使用 PHP 、 MYSQL 编写和更新 XML 文件