Jeg ville lave OPDATERING først, ellers opdaterer du de rækker, du lige har indsat
SELECT .. INTO #temp FROM (shredXML)
BEGIN TRAN
UPDATE ... FROM WHERE (matches using #temp)
INSERT ... SELECT ... FROM #temp WHERE NOT EXISTS
COMMIT
Jeg ville også overveje at ændre XML til en midlertidig tabel og bruge SQLBulkCopy. Vi har fundet ud af, at dette er mere effektivt end at parse XML generelt for mere end et par hundrede rækker. Hvis du ikke kan ændre dette, makulerer du så XML'en til en midlertidig tabel først?