Първо бих направил АКТУАЛИЗАЦИЯТА, в противен случай вие ще актуализирате редовете, които току-що сте вмъкнали
SELECT .. INTO #temp FROM (shredXML)
BEGIN TRAN
UPDATE ... FROM WHERE (matches using #temp)
INSERT ... SELECT ... FROM #temp WHERE NOT EXISTS
COMMIT
Също така бих обмислил промяна на XML на временна таблица и използване на SQLBulkCopy. Установихме, че това е по-ефективно от анализа на XML като цяло за повече от няколкостотин реда. Ако не можете да промените това, първо ли нарязвате XML във временна таблица?