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
  • ...

由于某种原因,该脚本不会将包含数字的名称传递给备份脚本。如果我用静态名称 (appName_Configuration1) 替换 @database 变量,它就可以正常工作。

还值得一提的是:还有一些其他数据库最后有一个数字,它们工作正常:

  • 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 回答