У нас есть серверы по 100 БД каждый. Я хочу запустить инструкцию select примерно на 50-75 баз данных на каждом сервере.Создание цикла while для запуска оператора select в отношении списка БД на одном сервере
Я могу написать инструкцию select, чтобы поместить необходимые DB в временную таблицу.
Оттуда я хочу запустить цикл while, который проходит через каждую БД и запускает оператор select, чтобы я мог выяснить, какие БД имеют эту активную учетную запись. Его нужно регулярно запускать, поэтому я не просто делаю это вручную.
Вот что у меня есть. Это дает мне ошибку на моей команде «использовать», говоря, неправильный синтаксис около @hospuse
DECLARE @hospcounter INT;
DECLARE @hospuse varchar(100);
DECLARE @userlogin varchar(50);
SET @hospcounter = 0;
SET @hospuse = (select name from #tempdbnames where hospnumber = '1')
SET @userlogin = 'dmarch'
SELECT IDENTITY(int, 1,1) AS hospnumber, name into #tempdbnames
FROM master.dbo.sysdatabases
where name NOT LIKE ('%storage_0%')
AND NAME NOT LIKE ('%WSR%')
AND name NOT LIKE ('Z%')
AND name NOT LIKE ('master')
AND name NOT LIKE ('model')
AND name NOT LIKE ('msdb')
AND name NOT LIKE ('tempdb')
AND name NOT LIKE ('_Placeholder')
WHILE @hospcounter <= (select MAX(hospnumber) from #tempdbnames)
BEGIN
USE @hospuse
SELECT ro.user_login, ro.activated from rev_operator ro where ro.user_login = @userlogin and ro.activated != '0'
SET @hospcounter = @hospcounter + 1;
SET @hospuse = (select name from #tempdbnames where hospnumber = @hospcounter);
END;
PRINT 'Done';
GO
стола падения #tempdbnames
Я также попытался это с sp_msforeachdb, но не мог понять, как получить синтаксис прямо для фильтрации БД, которые я хотел использовать, без буквального указания NOT IN и перечисления каждой БД, которую я не хотел. Это не работает, потому что DB добавляются регулярно.
Я получаю это. – Frontier3
Msg 208, уровень 16, состояние 1, строка 38 Неверное имя объекта 'rev_operator'. – Frontier3
Восстановленный оригинальный ответ, который не включал в себя необходимый динамический SQL, мои извинения. Попробуйте, если ошибка сохранится, то это звучит, как некорректные базы данных вставляются в таблицу, я бы проверил предложение WHERE, чтобы убедиться, что вся база данных, в которой мы не хотим, чтобы выполняемый запрос был отфильтрован – sqlnick