2017-11-13 9 views
0

안녕하세요. 아래 코드를 try 블록 안에 작성했지만 catch 블록에 오류가 없습니다. 독립형 대량 삽입은 오류 메시지를 생성합니다.BULK INSERT 시도 블록에서 오류가 발생하지 않습니다.

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 
+0

이 유 catch 블록을 포함 할 수 있습니다 –

+0

귀하의 질문에 문제 TRY/CATCH 코드를 추가하십시오 . –

+0

@DanGuzman이 try and catch 블록을 추가했습니다. – Sambhu

답변

0

는 당신은 변수 값을 할당의 CATCH 블록에서 오류를 제기하지 않습니다. THROW 사용하여 SQL Server 2012에서

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; 

이상 CATCH 블록 단순화 할 수 있습니다 : RAISERROR를 추가하려고

BEGIN CATCH 
    IF @@TRANCOUNT > 0 ROLLBACK; 
    THROW; 
END CATCH;