На работе у нас есть несколько баз данных, в которые нам нужно выполнить те же операции. Я хотел бы написать 1 SP, который будет перебирать операции и устанавливать базу данных в начале цикла (пример для последующего). Я пробовал sp_executesql ('USE' + @db_id), но это только устанавливает БД для объема этой хранимой процедуры. Я не хочу зацикливаться на именах жестко закодированных баз данных, потому что нам нужно делать подобные вещи во многих разных местах, и трудно запомнить, где нужно изменить, если мы добавим еще одну БД.Динамически изменяющиеся базы данных в SQL Server 2000
Любые мысли>
Пример:
DECLARE zdb_loop КУРСОРОМ FAST_FORWARD ДЛЯ ВЫБОР отчетливую db_id от DBS порядке db_id
ОТКРЫТЫЙ zdb_loop FETCH СЛЕДУЮЩИЙ ИЗ zdb_loop НА @db_id
WHILE @@ FETCH_STATUS = 0 BEGIN USE @db_id
--Do stuff against 3 or 4 different DBs
FETCH NEXT FROM zdb_loop INTO @db_id
END
ЗАКРЫТЬ zdb_loop DEALLOCATE zdb_loop
Вот что я сделал в качестве теста: SET @cmd = 'if' '?' '=' 'Int_tables' 'use' '?' '' Я получаю синтаксическую ошибку около 'master' ... (Я получаю его для всех БД). Сегодня я собираюсь поиграть с ним. – spuppett
Немного изменил это значение: SET @cmd = 'if' '?' '=' 'Int_tables' 'use?' К сожалению, я получаю те же результаты, что и с использованием SP_executesql, т. Е. Он использует только этот db в рамках sp. – spuppett