我有两个具有以下结构的表:
People
Id | LastName | FirstName | Other columns...
第二个表有一个XML列:
Id | MyXmlCol | Other columns...
MyXmlCol
存储以下XML:
<myData>
<block>
<person id="1" />
...other nodes
</block>
...other blocks
</myData>
id属性实际指向People表的Id列。
我需要的是查询MyXmlCol
,以便它返回:
<myData>
<block>
<person id="1" LastName="Jones" FirstName="Bob" />
...other nodes
</block>
...other blocks
</myData>
是否可以进行此类投影? 我正在使用Sql Server 2012。
答案 0 :(得分:1)
如果单个元素“块”中只能有一个元素“person”,那么这应该适合:
update T
set MyXmlCol.modify('
insert (
attribute LastName {sql:column("P.LastName")},
attribute FirstName {sql:column("P.FirstName")}
)
into (/myData/block/person)[1]')
from @Table2 T
inner join @People P on T.MyXmlCol.value('(/myData/block/person/@id)[1]', 'int') = P.Id