Sur SQL 2008, vous pouvez simplement utiliser MERGE - beaucoup plus simple que l'une ou l'autre de vos approches.
De plus, je ne suis pas avec vous sur "Je ne veux pas utiliser de transactions pour des raisons de performances" - chaque commande DML que vous exécutez fait de toute façon partie d'une transaction, il y a donc des transactions même si vous ne les ouvrez pas explicitement. Si vous rencontrez des problèmes de performances, vous pouvez publier plus de détails afin d'obtenir plus d'aide sur les performances.
Modifier :si vous avez besoin d'insertions très rapides, n'insérez pas une ligne à la fois. Ajoutez des ensembles de lignes et utilisez MERGE - l'avantage que vous obtiendrez en insérant des lots de lignes à la fois devrait largement dépasser les améliorations mineures que vous obtiendrez en optimisant la vitesse d'ajout d'une ligne.
Quoi qu'il en soit, le raisonnement théorique sur tout ce qui concerne les bases de données n'est généralement pas suffisant. Vous avez vraiment besoin de comparer pour déterminer ce qui est plus rapide. Ce que vous appelez "interroger inutilement une ligne existante" peut être complètement négligeable, et vous ne savez pas si c'est le cas tant que vous ne l'avez pas mesuré dans des conditions réalistes.