SQL Transact-SQL不适用于数据库名称配置1

时间:2012-05-30 07:28:30

标签: sql-server-2008 tsql

我在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

基本上,我检索数据库列表并为每个数据库执行备份脚本。 此脚本适用于大多数数据库,但某些数据库会返回错误:

  

Msg 911,Level 16,State 11,Line 1
  数据库'appName_Configuration'不存在。确保正确输入名称。

这是正确的,这个数据库不存在。我们有几个这样的数据库:

  • appName_Configuration1
  • appName_Configuration2
  • ...

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

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

  • appName_Microsoft1
  • appName_Microsoft2

我怀疑“配置”这个词可能与它有关,但是现在不能重命名数据库。任何人都可以帮我找到解决方案,以便将名称正确传递给存储过程吗?

亲切的问候, 马修

2 个答案:

答案 0 :(得分:3)

根据数据库名称增加@database变量的大小最大长度可以是... e.g。

declare @database nchar(100);

答案 1 :(得分:0)

您将@database声明为nchar(20)。你的名字更长。例如,使用nvarchar(50)。