T-Sql使用命令: how to handle errors?

标签 t-sql error-handling sql-server-2008-r2

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

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

关于T-Sql使用命令: how to handle errors?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31188949/

相关文章:

sql - 如果列存在则使用列值

sql - CTE和TEMP表之间的主要区别是什么?

SQL 表键值对到 XML

sql-server - 批量插入时保留行顺序

javascript - 如何优雅地防止 native react 崩溃?

error-handling - Ninject ToFactory 不使用参数

sql-server-2008-r2 - 更新数据库后如何将更改传播到分析服务

SQL Server 2012 内存不足错误消息

sql - MSSQL - 授予除一个表之外的所有表的选择权限

Swift 2.0 错误处理