[英]Using XQuery in Sql Server to Parse XML Complex types
我有以下XML:
<Feed>
<FeedId>10</FeedId>
<Component>
<Date>2011-10-01</Date>
<Date>2011-10-02</Date>
</Component>
</Feed>
现在,如果可能的话,我想将XML解析为sql,以便将其序列化为以下关系数据:
FeedId Component_Date
10 2011-10-01
10 2011-10-02
但是使用以下SQL:
DECLARE @XML XML;
DECLARE @XMLNodes XML;
SET @XML = '<Feed><FeedId>10</FeedId><Component><Date>2011-10-01</Date><Date>2011-10-02</Date></Component></Feed>';
SELECT t.a.query('FeedId').value('.', 'INT') AS FeedId
,t.a.query('Component/Date').value('.', 'VARCHAR(80)') AS [Component_Date]
FROM @XML.nodes(' /Feed') AS t(a)
我得到的最近的是:
FeedId Component_Date
10 2011-10-012011-10-02
所以日期值出现在同一行,是否有可能使用XQuery实现我想要的东西?
你需要再次调用.nodes()
因为你的XML中有多个条目 - 试试这个:
SELECT
t.a.value('(FeedId)[1]', 'INT') AS FeedId,
c.d.value('(.)[1]', 'DATETIME') AS [Component_Date]
FROM
@XML.nodes('/Feed') AS t(a)
CROSS APPLY
t.a.nodes('Component/Date') AS C(D)
给我一个输出:
FeedId Component_Date
10 2011-10-01 00:00:00.000
10 2011-10-02 00:00:00.000
好的,我可以使用OPENXML方法来做到这一点:
eclare @idoc int
DECLARE @XML XML;
DECLARE @XMLNodes XML;
SET @XML = '<Feed><FeedId>10</FeedId><Component><Date>2011-10-01</Date><Date>2011-10-02</Date></Component></Feed>';
exec sp_xml_preparedocument @idoc OUTPUT, @XML
-- SELECT stmt using OPENXML rowset provider
SELECT *
FROM OPENXML (@idoc, '/Feed/Component/Date',1)
WITH (
FeedId Int '../../FeedId',
ComponentDate Date 'text()'
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.