我正在使用 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”方法,其中 SQL 执行(在我的情况下)<Text>
节点的不同选择,然后使用某种枢轴?但我似乎找不到神奇的组合来返回我需要的结果作为每行的一组动态列(<Item>
在 的集合中<Items>
)。
我确信看到这么多非常相似的例子是可以做到的,但是解决方案再次让我望而却步!
任何帮助都感激不尽!!