Dun*_*kel 2 xml sql t-sql sql-server
我正在尝试编写SQL Server查询以从XML列中选择值.
列messagebody(类型XML)的内容如下:
<?xml version="1.0" encoding="utf-16"?>
<GetActivityUnemploymentGenerelEventType xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ActivityItem xmlns="http://service.bmuuuu/">
<ActivityCoreItem xmlns="http://service.bmxxxx">
<ActivityIdentifier xmlns="http://service.bmyyyy">d5ck7132-703c-1234-8099-963b35b24bc5</ActivityIdentifier>
<StartDate xmlns="http://service.bmaaa">2016-01-25</StartDate>
Run Code Online (Sandbox Code Playgroud)
我正试图指出startdate和的价值ActivityIdentifier.
我试过几个解决方案fx:
SELECT XML.query('messagebody(/GetActivityUnemploymentGenerelEventType/ActivityItem/ActivityCoreItem/ActivityIdentifier)')
FROM table
SELECT messagebody.value('(/GetActivityUnemploymentGenerelEventType/ActivityCoreItem/ActivityIdentifier/Value)[1]', 'int')
FROM table
SELECT messagebody.value('(/GetActivityUnemploymentGenerelEventType//ActivityCoreItem/ActivityIdentifier())[1]', 'nvarchar(max)')
FROM table
Run Code Online (Sandbox Code Playgroud)
查询结果:
找不到列"messagebody"或用户定义的函数或聚合"messagebody.value",或者名称不明确.
有什么建议?
您不尊重XML文档中现有的XML命名空间!你需要在XQuery中包含这些 - 试试这个:
;WITH XMLNAMESPACES ('http://service.bmuuuu/' AS ns1,
'http://service.bmxxxx' AS ns2,
'http://service.bmyyyy' as ns3,
'http://service.bmaaa' as ns4)
SELECT
ActivityIdentifier = xc.value('(ns3:ActivityIdentifier)[1]', 'varchar(100)'),
StartDate = xc.value('(ns4:StartDate)[1]', 'varchar(25)')
FROM
dbo.YourTable
CROSS APPLY
MessageBody.nodes('/GetActivityUnemploymentGenerelEventType/ns1:ActivityItem/ns2:ActivityCoreItem') AS XT(XC)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
744 次 |
| 最近记录: |