错误未从 BULK INSERT IN try 块中引发
Error not raising from BULK INSERT IN try block
您好,我已经在 try 块中编写了以下代码,但没有引发错误到 catch 块。但独立的批量插入会生成错误消息。
BEGIN TRY
SET @sql =
'
BULK INSERT dbo.vw_Data_Import_ISO_CSP_OPMHC_Premium--<-- table view
FROM ''' + @SourceFilePath + '''
WITH ( FIRSTROW = 2, FIELDTERMINATOR = ''|'', ROWTERMINATOR = ''\n'' );
'
EXECUTE (@sql)
END TRY
BEGIN CATCH
SELECT
@error_number = ERROR_NUMBER(),
@error_message = ERROR_MESSAGE(),
@error_line = ERROR_LINE()
SELECT @error_description = 'T-SQL error number ' + CAST(@error_number AS VARCHAR(10)) + ' on line ' + CAST(@error_line AS VARCHAR(10)) + '.'
END CATCH
您没有在 CATCH
块中引发错误,只是分配了一个变量值。尝试添加 RAISERROR
:
BEGIN TRY
SET @sql = ' BULK INSERT dbo.vw_Data_Import_ISO_CSP_OPMHC_Premium --<-- table view
FROM ''' + @SourceFilePath + ''' WITH ( FIRSTROW = 2, FIELDTERMINATOR = ''|'', ROWTERMINATOR = ''\n'', MAXERRORS = 0 );'
EXECUTE (@sql);
END TRY BEGIN CATCH
SELECT
@error_number = ERROR_NUMBER(),
@error_message = ERROR_MESSAGE(),
@error_line = ERROR_LINE();
SELECT @error_description = 'T-SQL error number ' + CAST(@error_number AS VARCHAR(10)) + ' on line ' + CAST(@error_line AS VARCHAR(10)) + '.';
RAISERROR(@error_description, 16, 1);
END CATCH;
在 SQL Server 2012 及更高版本中,可以使用 THROW
:
简化 CATCH 块
BEGIN CATCH
IF @@TRANCOUNT > 0 ROLLBACK;
THROW;
END CATCH;
您好,我已经在 try 块中编写了以下代码,但没有引发错误到 catch 块。但独立的批量插入会生成错误消息。
BEGIN TRY
SET @sql =
'
BULK INSERT dbo.vw_Data_Import_ISO_CSP_OPMHC_Premium--<-- table view
FROM ''' + @SourceFilePath + '''
WITH ( FIRSTROW = 2, FIELDTERMINATOR = ''|'', ROWTERMINATOR = ''\n'' );
'
EXECUTE (@sql)
END TRY
BEGIN CATCH
SELECT
@error_number = ERROR_NUMBER(),
@error_message = ERROR_MESSAGE(),
@error_line = ERROR_LINE()
SELECT @error_description = 'T-SQL error number ' + CAST(@error_number AS VARCHAR(10)) + ' on line ' + CAST(@error_line AS VARCHAR(10)) + '.'
END CATCH
您没有在 CATCH
块中引发错误,只是分配了一个变量值。尝试添加 RAISERROR
:
BEGIN TRY
SET @sql = ' BULK INSERT dbo.vw_Data_Import_ISO_CSP_OPMHC_Premium --<-- table view
FROM ''' + @SourceFilePath + ''' WITH ( FIRSTROW = 2, FIELDTERMINATOR = ''|'', ROWTERMINATOR = ''\n'', MAXERRORS = 0 );'
EXECUTE (@sql);
END TRY BEGIN CATCH
SELECT
@error_number = ERROR_NUMBER(),
@error_message = ERROR_MESSAGE(),
@error_line = ERROR_LINE();
SELECT @error_description = 'T-SQL error number ' + CAST(@error_number AS VARCHAR(10)) + ' on line ' + CAST(@error_line AS VARCHAR(10)) + '.';
RAISERROR(@error_description, 16, 1);
END CATCH;
在 SQL Server 2012 及更高版本中,可以使用 THROW
:
BEGIN CATCH
IF @@TRANCOUNT > 0 ROLLBACK;
THROW;
END CATCH;