如何从父节点下具有多个节点的xml中提取数据到sql中的表中

时间:2014-08-07 08:41:28

标签: sql sql-server xml

我有像

这样的xml
<list of roleids>
  <roleid> 1 </roleid>
  <roleid> 2 </roleid>
  <roleid> 3 </roleid>
  <roleid> 4 </roleid>
</list of Roleids>

我希望在具有列RoleID

的表中使用roleid值

我尝试过以下查询,但我没有得到预期的输出

 declare @ListOfRoleID XML
    set @ListOfRoleID = 
    '<list>
    <roleid>1</roleid>
    <roleid>2</roleid>
    </list>'

    DECLARE @RoleIDList TABLE (RoleID int)

    INSERT INTO @RoleIDList(RoleID)

    SELECT X1.value('(roleid)[1]','INT') as roleid
    from @ListOfRoleID.nodes('/list') as ListOfRoleID(x)
    CROSS APPLY @RoleIDList.nodes('/list') AS ListOfRoleID1 (X1)

1 个答案:

答案 0 :(得分:2)

您想要投射.nodes('/list/roleid'),这将为每个roleid创建一行。然后提取值。无需交叉申请。见sqlfiddle

 declare @ListOfRoleID XML = '<list>
    <roleid>1</roleid>
    <roleid>2</roleid>
    <roleid>3</roleid>
    </list>';

SELECT x.value('.','INT') as roleid
from @ListOfRoleID.nodes('/list/roleid') as ListOfRoleID(x);