У меня есть простая хранимая процедура, которая предназначена для удаления текущих данных и ввода новых данных. Если вход не выполнен, я хочу сохранить старые данные. Я попытался использовать следующий код, но старые данные всегда удалялись, даже 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 поместить ошибку в файл ошибок и ошибок не была поймана на улице.
Спасибо.
я поставил «попробовать» на внешней стороне «сделки», не работает. – user3191850