2つの回答を組み合わせて投稿します。異なるサーバーとデータベースを使用したいので、ジェイ・パテルがこれを行う最良の方法です。
しかし、それを try catch でラップすると、トランザクションが最善のアイデアになるため、Jay Patel のメソッドを使用してラップし、何らかの理由で失敗した場合にフェイルオーバーが発生するようにします。
BEGIN TRAN -- START THE TRANSACTION BUT DONT PHSICALLY PUT THE ROWS IN THE DATABASE UNTIL COMMIT
BEGIN TRY
INSERT INTO DB1.dbo.TestTable(FirstName, LastName)
SELECT RemoteTable.FirstName, RemoteTable.LastName FROM
OPENROWSET('SQLOLEDB',
'Server=x.x.x.x;Trusted_Connection=yes;user_id=xxxx;password=xxxx',
'SELECT FirstName, LastName FROM DB2.dbo.TestTable' ) as RemoteTable
END TRY
BEGIN CATCH
ROLLBACK -- IF THE INSERT FAILS DONT INSERT ANYROWS INTO THE DATABASE
END CATCH
COMMIT --USED FOR COMMITING THE ROWS TO THE DATABASE THEY ARE NOT ACTUALLY IN THE DATABASE UNTIL THIS HAS BEEN COMMITED