Как применить операцию сразу ко всем таблицам или ко всем базам данных?

Как применить операцию сразу ко всем таблицам или ко всем базам данных?Администраторам часто бывает необходимо перебрать все таблицы базы данных, чтобы над каждой таблицей произвести какое-то действие. Например, перестроить индексы.

Традиционно для такого перебора можно использовать курсор. Но есть способ проще — процедура sp_MSForEachTable. Ей можно передать текст команды или запроса, который будет выполнен для каждой таблицы в базе. Команда, разумеется, параметризуется — вместо вопросительного знака будет подставлено название таблицы.

lLx6Ct0OrUw

Посмотрите на сигнатуру этой процедуры:

2

За один вызов вы можете передать ей три команды, которые будут выполнены для каждой таблицы, плюс начальное и конечное действия для всего пакета команд, а также указать условие включения таблицы в перебор. Параметр @ReplaceChar предназначен для запросов, в которых не получается использовать вопросительный знак для параметризации.

3

Каждая из трёх команд может содержать больше одного SQL-запроса. При написании фильтра @WhereAnd учтите, что ваша строка будет встроена внутри процедуры в более сложный запрос к системным таблицам, поэтому используйте для фильтрации столбцы из SysObjects. Например:

4

Имеется аналогичная процедура для перебора всех баз данных на сервере — sp_MSForEachDB:

5

С её помощью вы сможете выполнить однотипный набор действий над каждой базой на сервере:

6

Автор: Самородов Федор Анатольевич

Запись опубликована в рубрике Полезно и интересно с метками . Добавьте в закладки постоянную ссылку.

Добавить комментарий

Войти с помощью: