Sql server SQL Server。。。。。。。。只备份几个数据库
我使用此处显示的存储过程从SQL Server备份数据库 它需要大约20个数据库的所有备份,现在我只需要对存储过程进行少量更改 它希望下面的数据库备份能够通过循环选择,如何修改现有的存储过程。谢谢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
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