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
我运行一个脚本,它从同一服务器上的多个数据库中选择数据。
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