2017-01-21 11 views
0

SQL Serverを使用してXMLでノードにアクセスしようとしています。SQL ServerクエリからXMLノードを取得

私がnullを取得しています 私はノードすなわち "情報" を印刷したい
CREATE TABLE temp.testXML(ID INT, xmlinput XML NULL); 

INSERT INTO temp.testXML 
VALUES (1, '<root><node1><lang>English</lang></node1><innernode><info>20170117T022113</info></innernode></root>') 

"20170117T022113"

SELECT 
    t.id, 
    x.XmlCol.value('(/innernode/info)[1]', 'VARCHAR(100)') AS dt 
FROM 
    [temp].[testxml] as t 
CROSS APPLY 
    t.rawxml.nodes('/root') as x(XmlCol) 

ノード値はどのように取得できますか?

おかげ MR

答えて

1

nodes機能でクエリに2つのミス

  • 使用xmlinput列名が代わりにありますrawxml
  • 最初の値関数の/

クエリを削除します

SELECT t.id, 
     x.XmlCol.value('(innernode/info)[1]', 'VARCHAR(100)') AS dt 
FROM [testxml] AS t 
     CROSS APPLY t.xmlinput.nodes('/root') AS x(XmlCol) 
+0

「/」を使用するときと使用しないときをもう少し明確にしました。ありがとうございました – user2726975

+0

@ user2726975 - xmlの専門家ではありませんが、 'value'メソッドでは' XQuery'(最初のパラメータ)が 'root'で始まるときに'/'で始まっています。 'value('(/ root/innernode/info)[1] '、' VARCHAR(100) ')のようなもの –

+1

@ user2726975単純な言い方をすれば、1スラッシュ= * 1レベル下に移動*、2スラッシュ= *以下の任意のノードを見つける*、コンテキストノード*に相対的なスラッシュ= *はない。あなたはルートから*ナビゲート*するよりも、あなたがパスを下に(そして上/側に)移動するよりも始めます。現在の* position *はコンテキストノード*です。どのパスもそこから始まります。最初のルートノードはコンテキストノードです。ここでは、[包括的な概要](https://www.bennadel.com/blog/2142-using-and-expressions-in-xpath-xml-search-directives-in-coldfusion.htm) – Shnugo

関連する問題