2012-09-14 35 views
0

我有一個數據倉庫過程,可以將數十個表從鏈接服務器下載並替換爲本地數據庫。每隔一段時間,代碼就會卡在鏈接服務器上的其中一個表上,因爲鏈接服務器上的表處於轉換狀態。我假設,由於整個過程被認爲是一個事務提交,所以當過程被阻塞時,到目前爲止,這個過程沒有發生任何變化。但事實恰恰相反,在程序卡住之前「下載」的表格會在本地服務器上使用當今版本進行更新。在更改持久之前,SQL Server是否應該等待整個過程完成?在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 
+3

我在存儲過程中看不到任何'BEGIN TRAN' ... –

回答

2

SQL Server將過程中的每個語句視爲單獨的事務。需要添加「BEGIN TRANSACTION」和「COMMIT TRANSACTION」以將事務歸爲一組。