26 августа 2019 года    
Понедельник | 02:27    
Главная
 Новости
Базы данных
Безопасность PC
Всё о компьютерах
Графика и дизайн
Интернет-технологии
Мобильные устройства
Операционные системы
Программирование
Программы
Связь
Сети
 Документация
Статьи
Самоучители
 Общение
Форум







Разделы / Базы данных / MS SQL Server

SP_MSForeachtable или жизнь без курсоров

SP_MSForeachtable или жизнь без курсоров

По материалам статьи Brian Knight "SP_MSForeachtable - Life Without Cursors"
http://www.sqlservercentral.com/columnists/bknight/sp_msforeachtable.asp

Многие задачи, по привычке, решаются с помощью курсоров. Однако, в глубинах базы данных master скрыт ряд хранимых процедур, которые могут заменить некоторые курсоры. Курсоры все еще будут использоваться, но новые возможности позволят Вам уделять больше времени непосредственно для разработки.
Например, по традиции, если бы Вы захотите выполнить DBCC CHECKTABLE для каждой таблицы в базе данных, Вы можете написать сложный курсор, подобный представленному ниже:

DECLARE @dataname varchar(255),
@dataname_header varchar(255)

DECLARE datanames_cursor CURSOR FOR SELECT name FROM master..sysdatabases
WHERE name not in ('master', 'pubs', 'tempdb', 'model')
OPEN datanames_cursor
FETCH NEXT FROM datanames_cursor INTO @dataname
IF (@@fetch_status = 0)
BEGIN
SELECT @dataname_header = "Database " + RTRIM(UPPER(@dataname))
PRINT @dataname_header
SELECT @dataname_header = RTRIM(UPPER(@dataname))
EXEC ("DBCC CHECKDB " + "(" + @dataname + ")")
END
CLOSE datanames_cursor
DEALLOCATE datanames_cursor

Начинаясь с версии 6.5 SQL Server, Микрософт ввёл хранимую процедуру, называемую sp_MSreachfortable. Используя символ вопроса как указатель на список всех имён таблиц, процедура будет делать то же самое, что и вышеупомянутый курсор, но будет умещаться только в одну строку. Вы можете заменять курсор следующей командой:

sp_MSforeachtable @command1="print '?' dbcc checktable ('?')"

Вы можете использовать до трех команд в этой хранимой процедуре, используя @command1, @command1 и @command3.


Перевод: Александр Гладченко  2001г.

 SP_MSForeachtable или жизнь без курсоров
Лента новостей


2006 (c) Copyright Hardline.ru