我在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)替换@database变量,它就可以正常工作。
另外值得一提的是:还有一些其他数据库最后都有一个数字,工作正常:
我怀疑“配置”这个词可能与它有关,但是现在不能重命名数据库。任何人都可以帮我找到解决方案,以便将名称正确传递给存储过程吗?
亲切的问候, 马修
答案 0 :(得分:3)
根据数据库名称增加@database变量的大小最大长度可以是... e.g。
declare @database nchar(100);
答案 1 :(得分:0)
您将@database声明为nchar(20)。你的名字更长。例如,使用nvarchar(50)。