2014-11-03 3 views
1

У меня есть простая хранимая процедура, которая предназначена для удаления текущих данных и ввода новых данных. Если вход не выполнен, я хочу сохранить старые данные. Я попытался использовать следующий код, но старые данные всегда удалялись, даже errorfilename генерируется с ошибкой. Выполнение всегда возвращает 0 и говорит успешно. Любая помощь будет оценена.Как выполнить откат exec

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 

Update проблема: Я использую SQL Express и управление студией 2012 выглядит как EXEC поместить ошибку в файл ошибок и ошибок не была поймана на улице.

Спасибо.

ответ