SQL Server - OPENXML如何获取属性值

时间:2009-03-20 21:32:38

标签: sql sql-server sql-server-2005

我有以下XML:

<Field FieldRowId="1000">
    <Items>
        <Item Name="CODE"/>
        <Item Name="DATE"/>
    </Items>
</Field>

我需要使用OPENXML获取FieldRowId。我到目前为止的SQL:

INSERT INTO @tmpField
      ([name], [fieldRowId])
SELECT [Name], --Need to get row id of the parent node
 FROM OPENXML (@idoc, '/Field/Items/Item', 1) 

2 个答案:

答案 0 :(得分:2)

编辑:我在xml中添加了一个根节点。并展示了抓住身份证。我假设你在xml中有多个字段元素。这假设您有起始XML;你给了一个物品并且必须向上移动吗?

DECLARE @T varchar(max) 
SET @T = 
'<root>
    <Field FieldRowId="1000">
        <Items>
            <Item Name="CODE"/>
            <Item Name="DATE"/>
        </Items>
    </Field>
    <Field FieldRowId="2000">
        <Items>
            <Item Name="CODE"/>
            <Item Name="DATE"/>
        </Items>
    </Field>
</root>'

DECLARE @X xml

SET @X = CAST(@T as xml)
SELECT Y.ID.value('../../@FieldRowId', 'int') as FieldID, 
       Y.ID.value('@Name', 'varchar(max)') as "Name"
FROM @X.nodes('/root/Field/Items/Item') as Y(ID)

答案 1 :(得分:0)

使用节点是可行的方法。每次使用OPENXML时,OPENXML占用SQL服务器内存的1/8。虽然{{1}}和节点通常具有相同的查询性能。