说,我有一个看起来像这样的 xml 列:
<mi>
<m>42</m>
</mi>
假设表:
Word(WordId:bigint, Wordtext:nvarchar, MessageIndex:xml)
如果 @MessageId 已经存在于 Messageindex 的 xml 树中的某个位置,我不希望以下参数化查询插入新的 xml 节点,而是要么失败并出现确定性错误代码,要么静默:
begin try
insert into Word (WordText, MessageIndex) values (@WordText, '<mi></mi>');
update Word set MessageIndex.modify('insert (<m>{sql:variable(""@MessageId"")}</m>) into(/mi)[1]') where WordId = scope_identity();
end try
begin catch
if error_number() = 2627
begin
update Word set
MessageIndex.modify('insert (<m>{sql:variable(""@MessageId"")}</m>) into(/mi)[1]')
where
WordText = @WordText;
end
else
throw
end catch
从 Word 中选择 WordId,其中 WordText = @WordText;
我如何有效地做到这一点?