在BULK INSERT中,TRY无法捕获错误

7
为什么在以下代码中TRY没有捕获错误,我该如何捕获此错误?
BEGIN TRY
  BULK INSERT [dbo].[tblABC]
  FROM 'C:\temp.txt'
  WITH (DATAFILETYPE = 'widechar',FIELDTERMINATOR = ';',ROWTERMINATOR = '\n')
END TRY

BEGIN CATCH
  select error_message()
END CATCH

我刚刚得到这个结果:
Msg 4860, Level 16, State 1, Line 2
Cannot bulk load. The file "C:\temp.txt" does not exist.

可能是 SQL 捕获 BULK INSERT 错误 4863 的重复问题。 - safetyOtter
2个回答

13

以下是帮助捕获此错误的一种选项:

BEGIN TRY
 DECLARE @cmd varchar(1000)
 SET @cmd = 'BULK INSERT [dbo].[tblABC] 
  FROM ''C:\temp.txt'' 
  WITH (DATAFILETYPE = ''widechar'',FIELDTERMINATOR = '';'',ROWTERMINATOR = ''\n'')'
 EXECUTE (@cmd)
END TRY

BEGIN CATCH
 select error_message()
END CATCH

接下来我在CATCH中遇到了以下错误:

Cannot bulk load. The file "C:\temp.txt" does not exist.

谢谢您,这让我的生活变得更加轻松,因为我正在使用批量导入来更新数据和表格,并且需要通过错误提示来知道导入文件存在问题。 - JasonR
那对我没用 :´>( - Bernardo Dal Corno

1
你应该将MAXERRORS参数设置为零,其默认值为10:
SET @cmd = 'BULK INSERT [dbo].[tblABC] 
  FROM ''C:\temp.txt'' 
WITH (MAXERRORS = 0, DATAFILETYPE = ''widechar'',FIELDTERMINATOR = '';'',ROWTERMINATOR = ''\n'')'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接