リンク サーバーからローカル データベースに数十のテーブルをダウンロードして置き換えるデータ ウェアハウジング手順があります。リンク サーバー上のテーブルが遷移状態にあるため、リンク サーバー上のテーブルの 1 つにコードがスタックすることがあります。プロシージャ全体が 1 つのトランザクション コミットと見なされるため、プロシージャがスタックした場合、プロシージャによってこれまでに行われた変更はコミットされていないと思います。しかし、逆の場合は、手順が行き詰まる前に「ダウンロード」されたテーブルは、ローカル サーバー上の現在のバージョンで更新されているはずです。変更が持続する前に、SQL Server は手順全体が完了するのを待つべきではありませんか?
CREATE PROCEDURE MYIMPORT
AS
BEGIN
SET NOCOUNT ON
IF EXISTS (SELECT * FROM INFORMATION.SCHEMA.TABLES WHERE TABLE_NAME = 'TABLE1')
DROP TABLE TABLE1
SELECT COLUMN1, COLUMN2, COLUMN3
INTO TABLE1
FROM OPENQUERY(MYLINK, 'SELECT COLUMN1, COLUMN2, COLUMN3 FROM TABLE1')
IF EXISTS (SELECT * FROM INFORMATION.SCHEMA.TABLES WHERE TABLE_NAME = 'TABLE2')
DROP TABLE TABLE2
SELECT COLUMN1, COLUMN2, COLUMN3
INTO TABLE2
FROM OPENQUERY(MYLINK, 'SELECT COLUMN1, COLUMN2, COLUMN3 FROM TABLE2')
--IF THE PROCEDURE GETS STUCK HERE, THEN CHANGES TO TABLE1 WOULD HAVE BEEN MADE ON THE LOCAL SERVER WHILE NO CHANGES WOULD HAVE BEEN MADE TO TABLE3 ON THE LOCAL SERVER
IF EXISTS (SELECT * FROM INFORMATION.SCHEMA.TABLES WHERE TABLE_NAME = 'TABLE3')
DROP TABLE TABLE3
SELECT COLUMN1, COLUMN2, COLUMN3
INTO TABLE3
FROM OPENQUERY(MYLINK, 'SELECT COLUMN1, COLUMN2, COLUMN3 FROM TABLE3')
END