2016-05-19 3 views
1

Ich bin mit SQL Server 2005.I wollen Anfrage xml Aufzeichnungen von Zeilen zu bringen. So dass ich die folgenden Codes verwendet. Es gibt drei Datensätze. Wenn ich so vorging, kann ich nur die einen Aufzeichnungen sehen.SQL Server xml.value Skelett dynamische Fälle

DECLARE @Xml XML

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 

So dass ich nächsten zwei SQL-Anweisungen die oben SQL. Ich möchte für dynamische verwenden index.Can ich verwenden? Bitte beraten.

@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)') 

Vielen Dank im Voraus.

Antwort

0

Sie können nodes() verwenden, um die XML-Daten in Reihen auf POSDetails Elementebene zu zerkleinern, dann value() verwenden Sie den inneren Text von PSTATION und INVNUMBER als NVARCHAR Daten, um so etwas zu extrahieren:

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

Ihnen so vielen Dank. Ich hab es geschafft – naing