0

次のコードを実行する 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

「構成」という言葉が何か関係があるのではないかと思いますが、データベースの名前を変更することは今のところ選択肢ではありません。名前がストアドプロシージャに正しく渡されるように、誰かが解決策を見つけるのを手伝ってくれますか?

よろしく、マシュー

4

2 に答える 2

3

データベース名の最大長に合わせて @database 変数のサイズを増やします...例

declare @database nchar(100);
于 2012-05-30T07:49:42.277 に答える
0

@database を nchar(20) として宣言しました。あなたの名前は長いです。たとえば、nvarchar (50)を使用します。

于 2012-05-30T07:34:07.507 に答える