2009-03-20 12 views
0

を取得する方法OPENXML私は、次のXMLがありますSQL Serverの - 属性値

<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

タグに記載されているように、XMLデータ型をネイティブにサポートするSQL Server 2005を使用しています。代わりにそれを使用してみませんか? –

+0

アプリケーションのデータレイヤの制限により、SPはxmlデータ型の入力パラメータを使用できません。 VARCHAR(MAX)入力パラメータを保持してXMLデータ型に変換する方法はありますか? – DotnetDude

答えて

2

EDIT:xmlにルートノードを追加しました。 IDを取得することを実証しました。私はあなたが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) 
+0

xml変数を取得したら、達成しようとしていることをどうやって行うのですか? – DotnetDude

+0

Lurkerが示したように直接使用することも、OPENXMLを使用することもできます。詳しくは、http://searchsqlserver.techtarget.com/tip/0,289483,sid87_gci1347994,00.htmlを参照してください。 – mrdenny

0

ノードを使用する方法があります。 OPENXMLは、使用するたびにSQL Serverメモリの1/8を消費します。 OPENXMLとノードは一般に同じクエリパフォーマンスを持ちますが。