Saya akan melakukan UPDATE terlebih dahulu jika tidak, Anda akan memperbarui baris yang baru saja Anda sisipkan
SELECT .. INTO #temp FROM (shredXML)
BEGIN TRAN
UPDATE ... FROM WHERE (matches using #temp)
INSERT ... SELECT ... FROM #temp WHERE NOT EXISTS
COMMIT
Saya juga akan mempertimbangkan untuk mengubah XML ke tabel temp dan menggunakan SQLBulkCopy. Kami menemukan ini lebih efisien daripada mem-parsing XML secara umum untuk lebih dari beberapa ratus baris. Jika Anda tidak dapat mengubahnya, apakah Anda merobek XML menjadi tabel sementara terlebih dahulu?