我正在使用下面的sql從Intranet中的文件導入一些數據。然而每過一段時間,都會出現超時錯誤,並且proc會失敗,這就是我使用事務的原因。如果事務失敗,我想讓ImportedTable清除。但是,這似乎並沒有發生。有什麼我在這裏失蹤?在SQL過程中超時
ALTER PROCEDURE [dbo].[pr_ImportData]
@StoreCode varchar(10),
@UserId varchar(100)
AS
BEGIN TRANSACTION
-- 1) Clear the data
exec pr_INTRANET_ClearData @StoreCode, @UserId
IF @@ERROR <> 0
BEGIN
ROLLBACK TRANSACTION
GOTO EXIT1
END
-- 2) Add the new data to the history Table
INSERT INTO data_History (...)
SELECT ... from ImportedTable WHERE StoreCode = @StoreCode and UserId = @UserId
IF @@ERROR <> 0
BEGIN
ROLLBACK TRANSACTION
GOTO EXIT1
END
-- 3) Add the data to the live table
INSERT INTO data_Live (...)
SELECT ... from ImportedTable WHERE StoreCode = @StoreCode and UserId = @UserId
IF @@ERROR <> 0
BEGIN
ROLLBACK TRANSACTION
GOTO EXIT1
END
IF @@ERROR <> 0
BEGIN
ROLLBACK TRANSACTION
GOTO EXIT1
END
EXIT1:
-- 4) Delete the rows from the temp table
DELETE FROM ImportedTable WHERE StoreCode = @StoreCode and UserId = @UserId
COMMIT TRANSACTION
更新1:我對SQL 2000和SQL2005運行此。
更新2:澄清:ImportedTable從不會在Exit1清除。
pr_INTRANET_ClearData是否返回錯誤代碼?我不認爲@@ Error可以用這樣的調用工作。嘗試聲明@Error,然後設置exec @Error = pr_INTRANET_ClearData @StoreCode,@UserId。確保pr_INTRANET_ClearData返回過程中的@@錯誤或自定義錯誤代碼。它可能會掛掉這個程序所做的任何事情。 – 2009-12-30 16:27:34