【发布时间】:2019-09-11 18:48:51
【问题描述】:
我有一个 SQL Server XML 列,其中包含如下数据:
<History>
<Entry>
.....
</Entry>
<Entry>
.....
</Entry>
</History>
我需要为每个 Entry 元素添加一个唯一标识符,给出以下结果:
<History>
<Entry entryID="AAA">
.....
</Entry>
<Entry entryID="BBB">
.....
</Entry>
</History>
我让它适用于第一次出现的 Entry 元素,但不知道如何将它应用于所有出现。另外,这个 entryID 是一个 GUID,我不知道如何为每一行生成一个新的。
这是我更新第一个元素的方法。
declare @eventId varchar(64)
set @eventId = CONVERT(varchar(64),NEWID())
update Histories
set XmlHistory.modify('
insert attribute EntryID {sql:variable("@eventId")}
into (History/Entry)[1]
')
where HistoryID=285162
我也有查询选择需要这个属性但还没有它的元素。这给出了主键和我需要更新的元素。我无法获得用于元素数组索引的唯一元素标识符。
select h.id rowPK, m.c.query('.') theElement
from TheTable h
cross apply h.XMLColumn.nodes('History/Entry[not(@EntryID)]') m(c)
where XMLColumn.exist('(History/Entry)')= 1
【问题讨论】:
标签: sql-server xml xpath xquery-sql