Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server。。。。。。。。只备份几个数据库_Sql Server - Fatal编程技术网

Sql server SQL Server。。。。。。。。只备份几个数据库

Sql server SQL Server。。。。。。。。只备份几个数据库,sql-server,Sql Server,我使用此处显示的存储过程从SQL Server备份数据库 它需要大约20个数据库的所有备份,现在我只需要对存储过程进行少量更改 它希望下面的数据库备份能够通过循环选择,如何修改现有的存储过程。谢谢 Emp_DB Salary_DB Company_DB Attendance_DB 代码: 谢谢 mg您只需将相关数据库添加到针对sys.databases的游标查询中的where子句中即可 CREATE PROCEDURE Backupdbs AS BEGIN DECLARE c1 CUR

我使用此处显示的存储过程从SQL Server备份数据库

它需要大约20个数据库的所有备份,现在我只需要对存储过程进行少量更改

它希望下面的数据库备份能够通过循环选择,如何修改现有的存储过程。谢谢

Emp_DB
Salary_DB
Company_DB
Attendance_DB
代码:

谢谢
mg

您只需将相关数据库添加到针对
sys.databases
的游标查询中的
where
子句中即可

CREATE PROCEDURE Backupdbs
AS
BEGIN
    DECLARE c1 CURSOR FOR
         SELECT name FROM sys.databases WHERE database_id > 4
            and name IN ('Emp_DB','Salary_DB','Company_DB','Attendance_DB')

    DECLARE @dbname varchar(100)
    DECLARE @fname varchar(100)

    OPEN C1

    FETCH NEXT FROM c1 INTO @dbname

    WHILE (@@fetch_status = 0)
        -- here, you're missing a 
        -- BEGIN
        SET @fname = 'D:\Backup\'+@dbname+'.bak'

        BACKUP DATABASE @dbname TO disk=@fname

        FETCH NEXT FROM cl INTO @dbname
    END

    CLOSE c1
    DEALLOCATE c1
END IF

一个更好的可扩展解决方案是拥有自己要备份的数据库名称列表,可能使用
groupId

然后,您可以传递一个
@groupId
参数,并为您选择的一组或一组数据库运行一批数据库备份-例如,您可以将大型数据库、小型数据库、频繁修改的数据库等组合在一起

例如,你可以有下表

create table BackupSets (
id int identity(1,1) primary key,
GroupId int,
[Name] sysname
)
并使用它而不是
sys.databases

select [Name] from BackupSets where groupId=@GroupId

您还可以在备份过程中检查
sys.databases
中列表中不存在的任何名称,并将其插入。

为什么不在光标定义中按名称过滤?
select [Name] from BackupSets where groupId=@GroupId