Администраторам часто бывает необходимо перебрать все таблицы базы данных, чтобы над каждой таблицей произвести какое-то действие. Например, перестроить индексы.
Традиционно для такого перебора можно использовать курсор. Но есть способ проще — процедура sp_MSForEachTable. Ей можно передать текст команды или запроса, который будет выполнен для каждой таблицы в базе. Команда, разумеется, параметризуется — вместо вопросительного знака будет подставлено название таблицы.
Посмотрите на сигнатуру этой процедуры:
За один вызов вы можете передать ей три команды, которые будут выполнены для каждой таблицы, плюс начальное и конечное действия для всего пакета команд, а также указать условие включения таблицы в перебор. Параметр @ReplaceChar предназначен для запросов, в которых не получается использовать вопросительный знак для параметризации.
Каждая из трёх команд может содержать больше одного SQL-запроса. При написании фильтра @WhereAnd учтите, что ваша строка будет встроена внутри процедуры в более сложный запрос к системным таблицам, поэтому используйте для фильтрации столбцы из SysObjects. Например:
Имеется аналогичная процедура для перебора всех баз данных на сервере — sp_MSForEachDB:
С её помощью вы сможете выполнить однотипный набор действий над каждой базой на сервере:
Автор: Самородов Федор Анатольевич