2016-07-19 8 views
1

スクリプトはSQL Serverデータベースのバックアップを1つずつ(カーソルを使用して)処理し、すべてのデータベースが完了したら[成功]メールを送信します。すべての値を取得せずにカーソルを完了

カーソルコード:

SELECT Name 
FROM sys.databases 
WHERE Name NOT IN ('Master', 'tempdb') 
ORDER BY Name 

結果:20のデータベース

スクリプト日常は、すべての20個のデータベースの完了に成功メールを送信します。 今日、私はわずか9データベースの完了と成功メールを持っています(しかし、私のSQL Serverにはまだ20のデータベースがあります)。

何が起こったのですか? 9個のDBだけでカーソルが完成したのはなぜですか?

スクリプトロジック:

IF (@BackupType = 'Differential' OR @BackupType = 'Trxlog') 
BEGIN 
    DECLARE db_cursor CURSOR FOR 
     SELECT Name 
     FROM sys.databases 
     WHERE Name NOT IN ('Master', 'tempdb') 
     ORDER BY Name 
END 
ELSE 
BEGIN 
    DECLARE db_cursor CURSOR FOR 
     SELECT Name 
     FROM sys.databases 
     WHERE Name NOT IN ('tempdb') 
     ORDER BY Name 
END 

OPEN db_cursor 
FETCH NEXT FROM db_cursor INTO @DBName 

WHILE @@FETCH_STATUS = 0 
BEGIN 
     --Code for taking the backup     
     FETCH NEXT FROM db_cursor INTO @DBName 
END 

--Code for sending the [Success] mail 
-- 

CLOSE db_cursor 
DEALLOCATE db_cursor 
+0

いつでも再現できますか? ?私は次のステップだけでなく、ファイルやテーブルに各ステートメントの出力を記録すると思う場合は – TheGameiswar

+0

成功/失敗を確認するために適切なブーレンを使用していますか? TheGameisWarのように、あなたのリストとスクリプトの実行(またはその失敗)の両方で一貫性をチェックします。 –

+0

実際、あなたのコード例は間違っています。 IF、ELSEステートメントのコードはすべて同じです。何か不足していますか? –

答えて

0

LOCAL STATICにカーソルタイプを変更するには、私の問題を解決しました。

DECLARE db_cursor CURSOR LOCAL STATIC 
関連する問題