Этот код прекрасно работает в SQL 2005, но, по-видимому, пропускает произвольное количество записей в конце выбора в SQL 2008 или SQL 2008R2.Я использую этот код для резервного копирования баз данных на моих производственных серверах.Сервер 2008 имеет 37 дБ (не считая tempdb), и каждый день он резервирует от 17 до 35 из этих дБ (даже если я запускаю команду select, мне всегда возвращается 37 строк).Задание, в котором оно выполняется, не содержит ошибок, но не создает резервные копии всех баз данных.
DECLARE @today VARCHAR(10)
SELECT @today = Convert(varchar(10),dateadd(day,0,Dateadd(day,datediff(day,0,getdate()),0)),120)
DECLARE @DBName varchar(500)
DECLARE DB_Cursor CURSOR FOR
SELECT name FROM sys.databases
OPEN DB_Cursor;
FETCH NEXT FROM DB_Cursor INTO @DBNAME
WHILE @@FETCH_STATUS = 0
BEGIN
IF @DBNAME <> 'tempdb'
BEGIN
declare @Path varchar(500)
select @Path = 'g:\DBBackups\'
declare @FileName varchar(4000)
select @FileName = @Path + @DBNAME + '_Full_' + @today + '.bak'
BACKUP DATABASE @DBName
TO DISK = @FileName
WITH NoInit, NoFormat, SKIP
END
FETCH NEXT FROM DB_Cursor INTO @DBNAME;
END;
CLOSE DB_Cursor;
DEALLOCATE DB_Cursor;