2011-07-07 4 views
0

j'ai une variable XML que je besoin d'interroger dans SQL et retourne une ligne pour chaque valeur:chaîne SQL XML Parse en lignes d'une table

declare @info xml 
select @info = '<parameters><locality_id>303</locality_id><locality_id>PC_303</locality_id></parameters>' 

Il paramètres nœud peut avoir 1 ou plusieurs valeurs de locality_id (2 dans le cas ci-dessus) la sortie devrait être

locality_id 
303 
PC_303 

J'ai été aussi loin que d'obtenir deux lignes que le résultat, mais les valeurs ne viennent pas correctement, il montre que la première valeur deux fois:

declare @info xml 
select @info = '<parameters><locality_id>303</locality_id><locality_id>PC_303</locality_id></parameters>' 
select feed.x.value('(//locality_id)[1]','NVARCHAR(255)') 
from @info.nodes('//parameters/locality_id') feed(x) 

Comment puis-je obtenir ce dont nous avons besoin pour cela?

Répondre

3

Le problème est dans (//locality_id)[1] ce qui veut dire « moi le premier locality_id à tous les niveaux ». Puisque vous sélectionnez déjà les nœuds dont vous avez besoin avec la méthode nodes, vous pouvez simplement sélectionner la valeur dans le contexte actuel à l'aide ..

declare @info xml 
select @info = '<parameters><locality_id>303</locality_id><locality_id>PC_303</locality_id></parameters>' 
select feed.x.value('.','NVARCHAR(255)') 
from @info.nodes('//parameters/locality_id') feed(x) 
+0

Parfait. Merci beaucoup. Cela a fonctionné comme j'avais besoin. – Nathan