2009-03-20 7 views
0

Ich habe die folgende XML:SQL Server - OPENXML wie Attributwert erhalten

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

Ich brauche die FieldRowId mit OPENXML zu bekommen. Die SQL habe ich bis jetzt:

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

Wie in den Tags angegeben, verwenden Sie SQL Server 2005, das den XML-Datentyp nativ unterstützt. Warum benutzt du das nicht stattdessen? –

+0

Aufgrund der Einschränkung in der Datenschicht in unserer Anwendung kann der SP keinen XML-Datentyp-Eingabeparameter verwenden. Gibt es eine Möglichkeit, den VARCHAR (MAX) -Eingabe-Parameter zu behalten und diesen irgendwie in XML-Datentyp umzuwandeln? – DotnetDude

Antwort

2

EDIT: Ich habe einen Wurzelknoten zum xml hinzugefügt. und demonstrierte die ID. Ich nehme an, Sie haben mehr als ein Feldelement in der XML. Dies setzt voraus, dass Sie den Start-XML-Code haben. Hast du ein Item bekommen und musst nach oben gehen?

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) 
+0

Also, wenn ich einmal die XML-Variable habe, wie mache ich das, was ich versuche zu erreichen? – DotnetDude

+0

Sie können es entweder direkt verwenden, wie Lurker gezeigt hat, oder Sie können OPENXML verwenden, wenn ich über http://searchsqlserver.techtarget.com/tip/0,289483,sid87_gci1347994,00.html spreche. – mrdenny

0

Verwenden von Knoten ist der Weg zu gehen. OPENXML nimmt 1/8 des SQL-Server-Speichers jedes Mal, wenn es verwendet wird. Obwohl OPENXML und Knoten im Allgemeinen dieselbe Abfrageleistung haben.

Verwandte Themen