1

我正在尝试查找并显示处于理想镜像状态之外的任何数据库名称的列表。下面的代码在一个数据库处于这种状态时有效,但是当出现更多错误时,我得到这个问题所指的错误:Msg 512, Level 16, State 1, Line 4 Subquery returned more than 1 value。当子查询跟随 =、!=、<、<=、>、>= 或子查询用作表达式时,这是不允许的。

这是我的代码:

声明@result int 声明@dbs varchar(256)

SET @result = (SELECT database_id from sys.database_mirroring WHERE mirroring_state_desc in ('SUSPENDED','DISCONNECTED','PENDING_FAILOVER'))
SET @dbs = (SELECT name from sys.databases where database_id = @result)

if @@ROWCOUNT > 0

print @dbs

非常感谢您的任何帮助,

布拉德。

4

2 回答 2

1

你真的需要print吗?也许尝试以这种方式显示数据库列表:

SELECT name 
from sys.databases 
where database_id in (SELECT database_id 
                      from sys.database_mirroring 
                      WHERE mirroring_state_desc in ('SUSPENDED','DISCONNECTED','PENDING_FAILOVER')
                     )
于 2013-09-13T10:42:15.597 回答
0

请试试这个:

选择 database_id 到 #temp1 from sys.database_mirroring WHERE WHERE mirroring_state_desc in ('SUSPENDED','DISCONNECTED','PENDING_FAILOVER'))

SELECT name from sys.databases where database_id in #temp1

#temp1 是您的临时表在哪里

于 2013-09-13T10:46:33.397 回答