次のコードを実行する SQL Server 2008 で SQL エージェント ジョブを作成しました。
BEGIN
SET NOCOUNT ON;
declare @database nchar(20);
DECLARE Database_Cursor CURSOR FOR
SELECT [name]
FROM master.dbo.sysdatabases
ORDER BY [name]
OPEN Database_Cursor;
FETCH NEXT FROM Database_Cursor INTO @database;
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC [dbo].[sp_BackupDatabase]
@databaseName = @database
FETCH NEXT FROM Database_Cursor INTO @database;
END;
CLOSE Database_Cursor;
DEALLOCATE Database_Cursor;
END
GO
基本的に、データベースのリストを取得し、各データベースのバックアップ スクリプトを実行します。このスクリプトはほとんどのデータベースで機能しますが、一部のデータベースではエラーが返されます。
メッセージ 911、レベル 16、状態 11、行 1
データベース 'appName_Configuration' が存在しません。名前が正しく入力されていることを確認してください。
これは正しいです。このデータベースは存在しません。次のような名前のデータベースがいくつかあります。
- appName_Configuration1
- appName_Configuration2
- ...
何らかの理由で、スクリプトは番号を含む名前をバックアップ スクリプトに渡しません。@database 変数を静的な名前 (appName_Configuration1) に置き換えると、問題なく動作します。
また、言及する価値があります: 末尾に数字があり、正常に機能するデータベースがいくつかあります。
- appName_Microsoft1
- appName_Microsoft2
「構成」という言葉が何か関係があるのではないかと思いますが、データベースの名前を変更することは今のところ選択肢ではありません。名前がストアドプロシージャに正しく渡されるように、誰かが解決策を見つけるのを手伝ってくれますか?
よろしく、マシュー