2016-10-28 6 views
2

は、だから私は知っている:私はこのようなスレッドから良い例で前に見てきたように名前で結果から得られた値からXML構造内のノードT-SQL

DECLARE @XML XML = 
'<A> 
    <First>1</First> 
    <Second>2</Second> 
    <Third>3</Third> 
</A>' 

--I can get the name of the node but... 
SELECT 
    Y.value('local-name(.)', 'varchar(50)') AS NodeName 
FROM @XML.nodes('A/*') AS X(Y) 

How to get node name and values from an xml variable in t-sql

しかし、他の方法で結果セットの値を使用してノードに名前を付けることはできますか?私は潜在的に前にこれをやったように感じるが、覚えていないので、私が尋ねると思った。私はFor XMLと他のSQL Server XML作成の順列には錆びています。上記の例から続く

ような何か:「ねえ値にノードの名前を作る」:

SELECT 
    Y.value('local-name(.)', 'varchar(50)') AS "ELEMENT-NODE" --Can I go from table to naming a node? 
FROM @XML.nodes('A/*') AS X(Y) 
--FOR XML AUTO, ELEMENTS -- NOPE 
FOR XML PATH(''), ROOT('A') 

氏は述べていますいくつかの構文がありますか?

+2

http://stackoverflow.comを参照してください。/questions/26216006/for-xml-sql-server-variable-element-name-in-output-xml –

答えて

2

これは一般的です! - コードから列のエイリアスを設定することはできません。事前にすべての既存の名前を知っていれば、それは本当に一般的なニーズに来るとき

  • 、動的SQL
  • どちらが厳しい制限があり、

    • PIVOT

      は、回避策のための2つのアプローチがあります。上記のあなたのXMLは次のように解決できるだけの例として

      DECLARE @XML XML = 
      '<A> 
          <First>1</First> 
          <Second>2</Second> 
          <Third>3</Third> 
      </A> 
      '; 
      
      DECLARE @colList NVARCHAR(MAX)= 
      (
      SELECT STUFF(
      (
          SELECT ',''' + nd.value('.','nvarchar(max)') + ''' AS ' + QUOTENAME(nd.value('local-name(.)','nvarchar(max)')) 
          FROM @XML.nodes('/A/*') AS A(nd) 
          FOR XML PATH('') 
      ),1,1,'') 
      ); 
      
      
      EXEC(N'SELECT ' + @colList); 
      

      しかし、誰1対すべて答えはありません...

    +0

    Ugghhhh、それは私が恐れていたものです。私はメッセンジャーを撃つことはしませんが、私はそれが要素ノードの細断のために一方向に行くことができますが、値からそれらを作成するために移動することができますMSの部分で不自由だと思う。 – djangojazz

    関連する問題