2016-09-23 9 views
2

私はxml配列を持っています。 selectを使用すると、最初の値だけが返されます。ここに私のコードです。私のコードで何が間違っています。selectはXMLから1つの項目のみを返します

DECLARE @xml xml; 
SET @xml =N'<root> 
    <Id>68890</Id> 
    <Id>68900</Id> 
</root>'; 

SELECT 

    replicateIdXml.replicateIds.value('Id[1]','bigint') as id 

    FROM @xml.nodes('/root') AS replicateIdXml (replicateIds) 

最初の行のみを返します。

答えて

2

あなたは非常に近くでした。 .nodes()は、すべての行の最初のレベルのroot要素を返します。しかし、唯一のroot要素があります...最初のId要素を選択するよりも、表示される要素です。あなたは.nodes()リターンに行方向全てId -elementsさせる必要があり

DECLARE @xml xml; 
SET @xml = 
N'<root> 
    <Id>68890</Id> 
    <Id>68900</Id> 
</root>'; 

SELECT 
    replicateIdXml.replicateIds.value('.','bigint') as id 
FROM @xml.nodes('/root/Id') AS replicateIdXml (replicateIds) 
+0

はどうもありがとうございました。私はあなたがこの答えを思いついたことに感謝します。私はたくさんのグーグルで検索しましたが、単一の列xmlで例を見つけることができませんでした。他のリンクがあれば提供してください。あなたの考え方を知りたい。 – shanavascet

+1

@shanavascet、これは '.nodes()' [https://msdn.microsoft.com/en-us/library/ms188282.aspx]が意味するものです...リンクをたどって、 '.nodes()'、 '.query()'、 '.value()'、 '.modify()'です。あなたがそれをハードコアしたい場合は、FLWORを読むことができます... – Shnugo

+0

ありがとうございました。 – shanavascet

関連する問題