пятница, 29 марта 2013 г.

Пример использования курсора

Как сделать резервную копию всех баз данных на экземпляре SQL сервера c использованием курсора

-- Пример использования курсоров

-- Создадим курсор, содержащий названия баз данных

DECLARE DB CURSOR FOR
    SELECT name
    FROM sys.databases
    WHERE name NOT IN ('TempDB') -- Исключения
    ORDER BY Name
DECLARE @DB_NAME AS sysname

OPEN DB
FETCH NEXT
    FROM DB
    INTO @DB_NAME
WHILE(@@FETCH_STATUS = 0)
    BEGIN
         PRINT @DB_NAME
         FETCH NEXT
             FROM DB
             INTO @DB_NAME
    END
CLOSE DB
DEALLOCATE DB
GO

-- Изменим скрипт. Делаем резервную копию каждой базы данных

DECLARE DB CURSOR FOR
    SELECT name
    FROM sys.databases
    WHERE name NOT IN ('TempDB') -- Исключения
    ORDER BY Name
 
DECLARE @DB_NAME AS sysname, @FILENAME AS sysname

OPEN DB
FETCH NEXT
    FROM DB
    INTO @DB_NAME
WHILE(@@FETCH_STATUS = 0)
    BEGIN
         SET @FILENAME = @DB_NAME + '.bak'
         PRINT N'Резерное копирование '
         + @DB_NAME + N' в файл ' + @FILENAME
         BACKUP DATABASE @DB_NAME
         TO DISK = @FILENAME
         FETCH NEXT
             FROM DB
             INTO @DB_NAME
    END
CLOSE DB
DEALLOCATE DB