如何回滚exec

时间:2014-11-03 17:06:42

标签: sql exec rollback

我有简单的存储过程,即删除当前数据并输入新数据。如果输入失败,我想保留旧数据。我尝试使用以下代码,但旧的数据总是被删除,即使errorfilename生成错误。执行总是返回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和management studio 2012.看起来EXEC将错误放入错误文件中并且没有错误被捕到外面。

感谢。