私はこの変数を持っています:
declare @xmlDoc XML
次のxmlが保存されています。
<?xml version="1.0" encoding="utf-8"?>
<NewDataSet>
<Table1>
<Sharedparam>shared</Sharedparam>
<Antoher>sahre</Antoher>
<RandomParam2>Good stuff</RandomParam2>
<MoreParam>and more</MoreParam>
<ResultsParam>2</ResultsParam>
</Table1>
<Table1>
<RandomParam2>do you</RandomParam2>
<MoreParam>think</MoreParam>
<ResultsParam>2</ResultsParam>
</Table1>
<Table1>
<Sharedparam>Last</Sharedparam>
<Antoher> Set </Antoher>
<RandomParam2> of </RandomParam2>
<MoreParam>values</MoreParam>
<ResultsParam>are here</ResultsParam>
</Table1>
<Table1 />
</NewDataSet>
データを取得するために使用している次のクエリがあります。
declare @xmlDoc XML
set @xmlDoc = '' -- Stack Overflow could not handle the xml all on one line.
SELECT -- Param 1
TBL.SParam.value('local-name((*)[1])', 'varchar(50)') as Param1Name,
TBL.SParam.value('(*)[1]', 'varchar(100)') as Param1Value,
-- Param2
TBL.SParam.value('local-name((*)[2])', 'varchar(50)') as Param2Name,
TBL.SParam.value('(*)[2]', 'varchar(100)') as Param2Value,
-- Param3
TBL.SParam.value('local-name((*)[3])', 'varchar(50)') as Param3Name,
TBL.SParam.value('(*)[3]', 'varchar(100)') as Param3Value,
-- Param 4
TBL.SParam.value('local-name((*)[4])', 'varchar(50)') as Param4Name,
TBL.SParam.value('(*)[4]', 'varchar(100)') as Param4Value,
-- Param 5
TBL.SParam.value('local-name((*)[5])', 'varchar(50)') as Param5Name,
TBL.SParam.value('(*)[5]', 'varchar(100)') as Param5Value
FROM @xmldoc.nodes('/NewDataSet/Table1') AS TBL(SParam)
結果にxmlファイルからの順序を追加する方法が必要です。(これはTable1の最初のインスタンスであり、次に2番目のインスタンスでした...)。
SQLテーブル変数の制限のため、これをまっすぐに保つためにID列を使用することはできません。(他の理由で、一時テーブルを使用したくありません。)
内部的に割り当てられたノードIDのようなものを返すクールなSQLXML関数があることを望んでいます。(または他の同様の注文方法。)
私はこのXML構造を制御していないので(私は読者のみです)、ID属性を追加するための変更を加えることはできません。
どんなアドバイスも素晴らしいでしょう!
編集/更新:
私は本当にこのようなデータが欲しいです:
1 | SharedParam | 共有 1 | Antoher | サーレ 1 | RandomParam2 | 良いもの 1 | MoreParam | もっと 1 | ResultsParam | もっと 2 | RandomParam2 | あなたは 2 | MoreParam | 考える 2 | ResultsParam | 2 3 | Sharedparam | 最後 3 | Antoher | セットする 。 。 。
しかし、私は不足しています。(多かれ少なかれ)列に入れることはできますが、番号付けの方法がわかりません。何かアイデアがあれば聞いてみたいです。
編集:
私はこれを行うためのクエリを理解しました(インターネットの助けを借りて)。次のようになります。
SELECT TBL.SParam.value('local-name(.)[1]', 'varchar(50)') as ParamName,
TBL.SParam.value('(.)[1]', 'varchar(50)') ParamValue,
TBL.SParam.value('for $s in . return count(../*[. << $s]) + 1', 'int') ParamPosition,
TBL.SParam.value('for $s in . return count(../../*[. << $s]) - 1', 'int') ParamIteration
FROM @xmldoc.nodes('/NewDataSet/Table1/*') AS TBL(SParam)