2014-11-03 24 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把错误放入错误文件,没有错误被捕获到外面。

谢谢。

回答