T-Sql USE 命令:如何处理错误?

T-Sql USE command: how to handle errors?

我运行一个脚本,它从同一服务器上的多个数据库中选择数据。

USE db1
SELECT x from tbl1
USE db2
SELECT y from tbl2
... etc.

如果正在从备份中恢复其中一个数据库,则脚本会在 USE 语句中出错。我该如何处理这些错误?尝试 - CATCH 不起作用。

这是在 2008R2 上。

编辑:返回的错误是:

Msg 927, Level 14, State 2, Line 4
Database 'db2' cannot be opened. It is in the middle of a restore.

您可以使用 DATABASEPROPERTYEX:

获取数据库的当前状态
SELECT DATABASEPROPERTYEX('db_name', 'Status')

这将输出数据库的当前状态,其中包括它是否正在恢复(这将给出状态“RESTORING”)。

在执行 USE 之前,请执行以下操作:

DECLARE @Status SQL_VARIANT
SELECT @Status = DATABASEPROPERTYEX('db1', 'Status')

IF (@Status = 'ONLINE')
BEGIN
    USE db1
    -- Do stuff
END
ELSE
BEGIN
    -- Do other stuff
END