På SQL 2008 kan du bare bruge MERGE - meget enklere end nogen af dine tilgange.
Jeg er heller ikke med dig på "Jeg vil IKKE bruge transaktioner af præstationsmæssige årsager" - hver DML-kommando du udfører er en del af en eller anden transaktion alligevel, så der er transaktioner, selvom du ikke åbner dem eksplicit. Hvis du oplever problemer med ydeevnen, kan du skrive flere detaljer, så du får mere hjælp til ydeevnen.
Edit:Hvis du har brug for virkelig hurtige indstik, skal du ikke indsætte en række ad gangen. Tilføj sæt rækker, og brug FLOT - fordelen, du vil få ved at indsætte batcher af rækker ad gangen, bør langt opveje eventuelle mindre forbedringer, du får ved at optimere hastigheden ved at tilføje en række.
Anyway, teoretiske ræsonnementer om alt relateret til databaser er normalt ikke godt nok. Du skal virkelig benchmarke for at bestemme, hvad der er hurtigere. Det, du kalder "unødigt forespørgsel efter en eksisterende linje", kan være fuldstændig ubetydeligt, og du ved ikke, om det er tilfældet, før du har målt det under realistiske forhold.