このコードはSQL2005で正常に機能しますが、SQL2008またはSQL2008R2での選択の最後からランダムな数のレコードが欠落しているように見えます。このコードを使用して、運用サーバー上のデータベースをバックアップします。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;