我正在使用 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>
节点的不同选择,然后使用某种枢轴?但是,我似乎找不到魔术组合,以便为每个行(<Items>
集合中的<Item>
)返回所需的动态列集作为结果。
我相信它可以做到,因为看到了很多非常相似的例子,但是解决方案仍然让我困惑!
非常感谢您的帮助!