2014-11-03 58 views
1

我有一個簡單的存儲過程,即刪除當前數據並輸入新數據。如果輸入失敗,我想保留舊數據。我試圖使用下面的代碼,但是舊的數據總是被刪除,即使錯誤文件名是由錯誤生成的。執行始終返回0並表示成功。任何幫助將不勝感激。如何回滾執行

ALTER PROCEDURE [dbo].[UpdateMyTable] 
    @FileName varchar(200), 
    @errorFileName varchar(300), 
AS 

BEGIN 
    SET XACT_ABORT ON 
    BEGIN TRY 
     BEGIN Transaction T 


     Delete FROM [dbo].[MyTable] 
     DBCC CHECKIDENT('MyTable',RESEED,0) 


     Declare @sql varchar(max) 
     set @sql = ' 
      BULK INSERT MyTable 
      From ''' + @FileName + ''' 
      WITH 
      (
       FIELDTERMINATOR = '','', 
       ROWTERMINATOR = ''\n'', 
       ERRORFILE = ''' + @errorFileName + ''' 
      )' 

     EXEC (@sql) 
     COMMIT TRANSACTION T 
    END TRY 
    BEGIN CATCH 
     ROLLBACK TRANSACTION T 
    END CATCH 
END 

更新問題:我使用SQL Express和管理工作室2012.看起來像EXEC把錯誤放入錯誤文件,沒有錯誤被捕獲到外面。

謝謝。

回答