【发布时间】:2011-04-20 17:42:59
【问题描述】:
我有一个带有 XML 列的表, 如果属性已经存在,我想更新 xml 以插入属性或更改属性值。
假设起始 xml 是:
插入:
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()]: Syntax error near 'attribute', expected '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 更新列,这需要我将行锁定在事务中,并且对于数据库来说可能更昂贵。
【问题讨论】:
标签: sql-server xml tsql xquery xquery-sql