2016-05-19 10 views
1

SQL Server 2005を使用しています。xmlレコードを行単位で照会する必要があります。 私は以下のコードを使用しました。 3つのレコードがあります。私がそのように書いたとき、私は1つのレコードしか見ることができません。SQL Server xml.valueスケルトンダイナミックケース

DECLARE @Emp TABLE(ps NVARCHAR(MAX) NULL,inv NVARCHAR(MAX) NULL) 


INSERT INTO @Emp(ps,inv) 

SELECT @Xml.value('(/NewDataSet/POSDetails/PSTATION)[1]', 'NVARCHAR(MAX)'), 

@Xml.value('(/NewDataSet/POSDetails/INVNUMBER)[1]', 'NVARCHAR(MAX)') 

SELECT * FROM @Emp 

DECLARE @Xml XML

はだから、私は次の2つのSQL文上記のSQLを使用しています。 インデックス用にダイナミックを使用したいのですが使用できますか?お知らせ下さい。

@Xml.value('(/NewDataSet/POSDetails/PSTATION)[2]/[3]', 'NVARCHAR(MAX)') 

INSERT INTO @Emp(ps,inv) 

SELECT @Xml.value('(/NewDataSet/POSDetails/PSTATION)[2]', 'NVARCHAR(MAX)'), 

@Xml.value('(/NewDataSet/POSDetails/INVNUMBER)[2]', 'NVARCHAR(MAX)') 

INSERT INTO @Emp(ps,inv) 

SELECT @Xml.value('(/NewDataSet/POSDetails/PSTATION)[3]', 'NVARCHAR(MAX)'), 

@Xml.value('(/NewDataSet/POSDetails/INVNUMBER)[3]', 'NVARCHAR(MAX)') 

ありがとうございます。

答えて

0

あなたは、その後、NVARCHARデータとして、このような何かをPSTATIONINVNUMBERの内部テキストを抽出するためにvalue()を使用し、POSDetails要素レベルでの行にXMLをシュレッドするnodes()を使用することができます。

INSERT INTO @Emp(ps,inv) 
SELECT 
    P.value('(PSTATION)[1]', 'NVARCHAR(MAX)'), 
    P.value('(INVNUMBER)[1]', 'NVARCHAR(MAX)') 
FROM @Xml.nodes('/NewDataSet/POSDetails') AS T(P) 
+0

はありがとうございました。わかった – naing