我有一个带有 XML 列的表,如果属性已经存在,我想更新 xml 以插入属性或更改属性值。
假设起始 xml 是:< d />
插入:
UPDATE Table
set XmlCol.modify('insert attribute att {"1"} into /d[1]')
改变:
UPDATE Table
set XmlCol.modify('replace value of /d[1]/@att with "1"')
如果该属性已存在,则插入将失败,如果该属性不存在,则替换将失败。我曾尝试使用'if',但我认为它不起作用,出现错误:“XQuery [modify()]: 'attribute' 附近的语法错误,预期为'else'。”
如果尝试
UPDATE Table
set XmlCol.modify('if empty(/d[1]/@att)
then insert attribute att {"1"} into /d[1]
else replace value of /d[1]/@att with "1"')
目前,我将 xml 选择到一个变量中,然后使用 T-SQL 对其进行修改,然后使用新的 xml 更新列,这需要我将行锁定在事务中,并且对于数据库来说可能更昂贵。