Ich würde das UPDATE zuerst durchführen, sonst aktualisieren Sie die Zeilen, die Sie gerade eingefügt haben
SELECT .. INTO #temp FROM (shredXML)
BEGIN TRAN
UPDATE ... FROM WHERE (matches using #temp)
INSERT ... SELECT ... FROM #temp WHERE NOT EXISTS
COMMIT
Ich würde auch in Betracht ziehen, das XML in eine temporäre Tabelle zu ändern und SQLBulkCopy zu verwenden. Wir haben festgestellt, dass dies effizienter ist, als XML im Allgemeinen für mehr als ein paar hundert Zeilen zu analysieren. Wenn Sie dies nicht ändern können, schreddern Sie dann zuerst das XML in eine temporäre Tabelle?