2017-10-25 11 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データベースのテーブルに基づいてAzureのSQLデータベースの外部テーブルを照会してい

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

外部テーブルをクエリする前に、このエラーをキャッチするか、外部テーブルを検証することはできますか? the documentationによると

+0

「外部テーブルが作成されたバース別のAzure SQLデータベースから存在していないテーブルを編集しましたか? – wBob

+0

それは本当に起こるべきではない別の問題です。外部表は、いくつかのメタデータに基づいて生成されます。私はこの特定の事例に一般的に関心を持っていました。 –

答えて

1

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.

これは、次のエラーがスローされます、いずれかの外部表に固有ではありません。

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

しかし、あなたは動的SQLを実行した場合、その後、あなたが到達しますキャッチブロック、例:

BEGIN TRY 
    EXECUTE sp_executeSQL N'SELECT * FROM msdb.dbo.InvalidTable;'; 
END TRY 
BEGIN CATCH 
    PRINT 'caught exception'; 
END CATCH 
関連する問題