我需要使用MS SQL查询
获取XML文档中存在的属性值Ex:我的XML看起来如下
<trade xmlns="www.somewebsite.com" Action = "Insert" TradeNumber = "1053" Volume = "25" DateTime = "2013-12-06T10:22:47.497" PNC = "false">
<Specifier Specifierid = "112" Span = "Single" Name = "Indian"/>
</trade>
我需要获取
交易标记中的“TradeNumber”,“Volume”,“DateTime”的值
说明符标记
在其特定列
下的单行中喜欢
TradeNumber Volume DateTime Name
1053 25 2013-12-06T10:22:47.497 Indian
我试过很多方法,但无法弄明白。 请帮忙
答案 0 :(得分:1)
declare @data xml ='
<trade xmlns="www.somewebsite.com" Action = "Insert" TradeNumber = "1053" Volume = "25" DateTime = "2013-12-06T10:22:47.497" PNC = "false">
<Specifier Specifierid = "112" Span = "Single" Name = "Indian"/>
</trade>'
;with xmlnamespaces(default 'www.somewebsite.com')
select
@data.value('trade[1]/@TradeNumber', 'int') as TradeNumber,
@data.value('trade[1]/@Volume', 'int') as Volume,
@data.value('trade[1]/@DateTime', 'datetime') as [DateTime],
@data.value('(trade/Specifier)[1]/@Name', 'nvarchar(max)') as Name
--------------------------------------------------------
TradeNumber Volume DateTime Name
1053 25 2013-12-06 10:22:47.497 Indian
或者,如果可能有多个交易:
;with xmlnamespaces(default 'www.somewebsite.com')
select
t.c.value('@TradeNumber', 'int') as TradeNumber,
t.c.value('@Volume', 'int') as Volume,
t.c.value('@DateTime', 'datetime') as [DateTime],
t.c.value('Specifier[1]/@Name', 'nvarchar(max)') as Name
from @data.nodes('trade') as t(c)
答案 1 :(得分:0)
另一种变体:
declare @doc xml
select @doc= '
<trade xmlns="www.somewebsite.com" Action = "Insert" TradeNumber = "1053" Volume = "25" DateTime = "2013-12-06T10:22:47.497" PNC = "false">
<Specifier Specifierid = "112" Span = "Single" Name = "Indian"/>
</trade>
'
;WITH XMLNAMESPACES('www.somewebsite.com' AS p)
SELECT
ActionAttribute = Y.i.value('(@Action)[1]', 'varchar(40)')
, TradeNumber = Y.i.value('@TradeNumber[1]', 'varchar(40)')
, Specifierid = Y.i.value('(./p:Specifier)[1]/@Specifierid', 'nvarchar(max)')
FROM
@doc.nodes('/p:trade') AS Y(i)