如果您有一个基于另一个Azure SQL数据库中不存在的表创建的外部表。
SELECT *
FROM invalid_external_table
抛出以下错误消息:
Msg 46823,Level 16,State 1,Procedure
从{azure database}检索数据时出错。收到的基本错误消息是:'无效的对象名称' dbo.invalid_table'。'。
我正在处理的问题是你似乎无法捕捉到这个错误。
以下代码会导致相同的错误:
BEGIN TRY
SELECT *
FROM invalid_external_table
END TRY
BEGIN CATCH
PRINT 'caught exception'
END CATCH
我在Azure SQL数据库中查询基于另一个SQL数据库中的表的外部表。
是否可以在查询外部表之前捕获此错误或验证外部表?
答案 0 :(得分:1)
TRY ... CATCH构造不会捕获以下条件:
- 语句级重新编译期间发生的错误,例如 编译后因对象名称解析错误 延期名称解析。
如果在TRY块内的较低执行级别(例如,执行sp_executesql或用户定义的存储过程时)的编译或语句级重新编译期间发生错误,则错误发生在低于TRY的级别... CATCH构造并将由关联的CATCH块处理。
这也不是特定于外部表,以下将引发错误:
BEGIN TRY
SELECT * FROM msdb.dbo.InvalidTable;
END TRY
BEGIN CATCH
PRINT 'caught exception';
END CATCH
但是如果你动态执行SQL,那么你将到达catch块,例如:
BEGIN TRY
EXECUTE sp_executeSQL N'SELECT * FROM msdb.dbo.InvalidTable;';
END TRY
BEGIN CATCH
PRINT 'caught exception';
END CATCH