xml解析数据到sql查询的问题

时间:2015-08-01 17:47:49

标签: sql sql-server xml

我正在研究SQL查询,我需要将xml解析为sql .Query正在为其他xml工作,但不适用于xml以下。我正在使用的查询如下

$("#edit_").show();
$("#cancel_").hide();
$("#save").hide();
$(".edit_value_").hide();
$(".value_").hide();

$("#edit_").click(function(){

    $("#edit_").hide();
    $("#save").show();
    $("#cancel_").show();
    $(".edit_value_").show();
    $(".value_").hide();

});

我得到的输出是

DECLARE @xmldata XML 
SET @xmldata =
N'<SearchProductsResponse xmlns="http://api.abc.com/">
<productItems>
<productItem id="5d0ee86d84bcc5edef43236d61419a59">
<trackingLinks>
<trackingLink adspaceId="100">
<ppv>
 abc.com
</ppv>
<ppc>
abc.com
</ppc>
</trackingLink>
</trackingLinks>
</productItem>
</productItems>
</SearchProductsResponse>';

select
    t1.c.value('@id', 'varchar(300)') as itemid,
    c.c.value('@id', 'int') as adspaceId
from 
    @xmldata.nodes('*:SearchProductsResponse/*:productItems/*:productItem') as t1(c)
    OUTER APPLY t1.c.nodes('*:trackingLinks/*:trackingLink') as c(c)

但我应该回归itemid adspaceId 5d0ee86d84bcc5edef43236d61419a59 NULL 。此查询适用于其他XML,但不知道此XML有什么问题。我仔细检查XML并查询与其他XML没什么不同。希望我不会错过一些愚蠢的错误

1 个答案:

答案 0 :(得分:1)

将adspaceId列的属性选择更改为@adspaceId

select
t1.c.value('@id', 'varchar(300)') as itemid,
c.c.value('@adspaceId', 'int') as adspaceId
from @xmldata.nodes('*:SearchProductsResponse/*:productItems/*:productItem') as t1(c)
OUTER APPLY t1.c.nodes('*:trackingLinks/*:trackingLink') as c(c)