たとえば、次のような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;
これを効率的に行うにはどうすればよいですか?