私は SQL Server (2008/2012) を使用しており、多くの検索から同様の回答があることはわかっていますが、私のケースに適した例/ポインターが見つからないようです。
このデータを保持する SQL Server テーブルに XML 列があります。
<Items>
<Item>
<FormItem>
<Text>FirstName</Text>
<Value>My First Name</Value>
</FormItem>
<FormItem>
<Text>LastName</Text>
<Value>My Last Name</Value>
</FormItem>
<FormItem>
<Text>Age</Text>
<Value>39</Value>
</FormItem>
</Item>
<Item>
<FormItem>
<Text>FirstName</Text>
<Value>My First Name 2</Value>
</FormItem>
<FormItem>
<Text>LastName</Text>
<Value>My Last Name 2</Value>
</FormItem>
<FormItem>
<Text>Age</Text>
<Value>40</Value>
</FormItem>
</Item>
</Items>
したがって、の構造は<FormItem>
同じになりますが、複数の (通常は 20 ~ 30 を超えない) フォーム アイテムのセットを持つことができます。
私は基本的に、以下の形式で SQL からクエリを返そうとしています。つまり、/FormItem/Text に基づく動的列です。
FirstName LastName Age ---> More columns as new `<FormItem>` are returned
My First Name My Last Name 39 Whatever value etc..
My First Name 2 My Last Name 2 40
そのため、現時点では次のことがありました。
select
Tab.Col.value('Text[1]','nvarchar(100)') as Question,
Tab.Col.value('Value[1]','nvarchar(100)') as Answer
from
@Questions.nodes('/Items/Item/FormItem') Tab(Col)
もちろん、それは私のXML行を列に転置しておらず、明らかにフィールドで固定されています..私は、SQLが(私の場合)<Text>
ノードの個別の選択を実行するさまざまな「動的SQL」アプローチを試してきました。ある種のピボットを使用しますか? しかし、必要な結果を各行の列の動的セットとして返すための魔法の組み合わせを見つけることができなかったようです(<Item>
のコレクション内<Items>
)。
非常に多くの非常によく似た例を見たので、それができると確信していますが、解決策は私にはわかりません!
どんな助けでもありがたく受け取った!!