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把错误放入错误文件,没有错误被捕获到外面。
谢谢。
我把“交易”之外的“尝试”,也不起作用。 – user3191850 2014-11-03 18:10:21