아래의 sql을 사용하여 인트라넷에서 파일의 일부 데이터를 가져옵니다. 그러나 때때로, 시간 초과 오류가 발생하고 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 : 명확히하기 : Exit1에서 ImportedTable이 지워지지 않습니다.
pr_INTRANET_ClearData가 오류 코드를 반환합니까? 나는 @@ Error가 이런 호출로 작동하지 않을 것이라고 생각한다. @Error를 선언하고 exec @ Error = pr_INTRANET_ClearData @StoreCode, @UserId를 설정하십시오. pr_INTRANET_ClearData가 프로 시저에서 @@ Error 또는 사용자 정의 오류 코드를 반환하는지 확인하십시오. 그 절차가했던 것에서 끊어 질 수 있습니다. –