2013-09-13 3 views
1

Я пытаюсь найти и отобразить список имен баз данных, которые находятся в чем угодно, но идеальном зеркальном состоянии. Приведенный ниже код работает, когда одна база данных находится в таком состоянии, но когда это больше, чем ошибка, я получаю ошибку, к которой относится этот вопрос: Msg 512, Level 16, State 1, Line 4 Подзапрос возвращает более 1 значения. Это недопустимо, когда подзапрос следует =,! =, <, < =,>,> = или когда подзапрос используется как выражение.Подзапрос возвращает более 1 значения - пытается напечатать имена баз данных

Вот мой код:

объявить @result Int DECLARE @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 

Спасибо очень любую помощь,

Брэда.

+0

ошибка довольно Obvio нас. Какой у Вас вопрос? –

+0

Поскольку вы пытаетесь сохранить коллекцию значений в одну переменную ... вы получаете эту ошибку –

+0

Я должен был быть более конкретным, но да, я понимаю, что говорит ошибка, я просил о том, чтобы обойти это .. Я думал, что это подразумевалось, но извинения, если нет. – MenthoL

ответ

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') 
        ) 
+0

Спасибо !!! Это идеально, и я буду применять его к таким дополнительным задачам. – MenthoL

+0

@MenthoL Я рад, что смогу помочь вам :) – Parado

+0

@Parado niceunderstanding –

0

Пожалуйста, попробуйте следующее:

выберите database_id в # temp1 из sys.database_mirroring WHERE WHERE mirroring_state_desc в ('Заблокировано', 'Disconnected', 'PENDING_FAILOVER'))

ВЫБРАТЬ имя из sys.databases где database_id в # temp1

где # TEMP1 ваша временная таблица

Смежные вопросы