2017-10-25 4 views
0

다른 Azure SQL 데이터베이스의 존재하지 않는 테이블을 기반으로 외부 테이블을 만들었습니다.유효하지 않은 외부 테이블을 쿼리 할 때 캐치 할 수 없음

SELECT * 
FROM invalid_external_table 

다음과 같은 오류 메시지가 발생합니다 :

Msg 46823, Level 16, State 1, Procedure
Error retrieving data from {azure database}. The underlying error message received was: 'Invalid object name 'dbo.invalid_table'.'.

내가 다루고있어 문제는이 오류를 잡을 수없는 것으로 보인다는 것이다. 같은 오류

다음 코드 결과 : 나는 다른 SQL 데이터베이스에서 테이블을 기초로 푸른 SQL 데이터베이스에 외부 테이블을 쿼리하고있어

BEGIN TRY 
    SELECT * 
    FROM invalid_external_table 
END TRY 
BEGIN CATCH 
    PRINT 'caught exception' 
END CATCH 

.

이 오류를 catch하거나 외부 테이블을 쿼리하기 전에 외부 테이블의 유효성을 검사 할 수 있습니까? the documentation에 따르면

+0

왜 "외부 테이블이 생성 되었습니까?" 다른 Azure SQL 데이터베이스에서 존재하지 않는 테이블에서 "ed? – wBob

+0

그건 실제로 발생해서는 안되는 또 다른 문제입니다. 외부 테이블은 일부 메타 데이터를 기반으로 생성됩니다. 나는이 특정한 경우에 일반적으로 관심이 있었다. –

답변

1

:

BEGIN TRY 
    SELECT * FROM msdb.dbo.InvalidTable; 
END TRY 
BEGIN CATCH 
    PRINT 'caught exception'; 
END CATCH 

하지만 당신은 동적 SQL을 실행할 경우, 당신은 도달 할 것입니다 :

이 중 외부 테이블을 특정하지 않습니다

TRY…CATCH constructs do not trap the following conditions:

  • Errors that occur during statement-level recompilation, such as object name resolution errors that occur after compilation because of deferred name resolution.

If an error occurs during compilation or statement-level recompilation at a lower execution level (for example, when executing sp_executesql or a user-defined stored procedure) inside the TRY block, the error occurs at a lower level than the TRY…CATCH construct and will be handled by the associated CATCH block.

, 다음과 같은 오류가 발생합니다 catch 블록 (예 :

BEGIN TRY 
    EXECUTE sp_executeSQL N'SELECT * FROM msdb.dbo.InvalidTable;'; 
END TRY 
BEGIN CATCH 
    PRINT 'caught exception'; 
END CATCH