我有以下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)
答案 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}}和节点通常具有相同的查询性能。