我正在设置一个作业来遍历链接服务器列表并对每个服务器执行特定查询。我正在尝试在 TRY-CATCH 块内执行查询,因此如果某个特定服务器出现问题,我可以将其记录下来,然后继续处理其他服务器。
我在循环内执行的查询如下所示:
BEGIN TRY
SELECT *
FROM OPENQUERY([server1], 'SELECT 1 AS c;');
END TRY
BEGIN CATCH
SELECT ERROR_NUMBER(), ERROR_MESSAGE();
END CATCH;
PRINT 'We got past the Catch block!';
Run Code Online (Sandbox Code Playgroud)
如果连接到服务器出现问题,代码会立即失败并且不会传输到CATCH块。如果服务器连接但在实际查询中存在错误,例如被零除,那么这会被CATCH块按预期捕获。
例如,我为一个我知道不存在的名称创建了一个链接服务器。执行上述操作时,我只得到:
OLE DB provider "SQLNCLI" for linked server "nonserver" returned message
"Login timeout expired".
OLE DB provider "SQLNCLI" for linked server "nonserver" returned message
"An error has occurred while establishing a connection to the server.
When connecting to SQL Server 2005, this failure may be …Run Code Online (Sandbox Code Playgroud)