Ich selber arbeite mit Firebird und da gäbe es m.E. eine Möglichkeit das Ganze vom Server selber erledigen zu lassen mit ungefähr folgendem
SQL-Befehl (, den ich allerdings jetzt nicht getestet habe):
Insert into Tabelle_A Select * from Tabelle_B where not Exists (Select * from Tabelle_A where IDNr = Tabelle_B.IDNr)
Erläuterung: Man kann mit einem INSERT auch mehrere Datensätze einfügen, deren Inhalt über das nachfolgend formulierte Select zugewiesen wird. Voraussetzung ist, dass das SELECT die gleichen Datentypen in der gleichen Reihenfolge liefert, wie sie vom INSERT erwartet werden. Da Du schreibst, es handelt sich um zwei gleiche Tabellen, wäre das in Deinem Fall ja erfüllt.
Prüf doch mal, ob diese Sysntax auch in
MSSQL zulässig ist.
Zu Deiner zweiten Frage kann ich leider nichts Konkretes sagen. Man könnte natürlich eine eigene Sperrtabelle definieren, die man vor jedem INSERT oder UPDATE abfragen müsste, um zu prüfen, ob die Aktion gerade zulässig ist.