我正在编写一个脚本,它将创建一个新文件夹并将所有数据库备份到该文件夹中。该脚本将生成新文件夹,但不会将备份保存到该文件夹中。我不确定我错过了什么。先感谢您。
DECLARE @name VARCHAR(50) -- database name
DECLARE @path VARCHAR(256) -- path for backup files
DECLARE @fileName VARCHAR(256) -- filename for backup
DECLARE @fileDate VARCHAR(20) -- used for file name
DECLARE @DirTree TABLE (subdirectory nvarchar(255), depth INT)
SELECT @fileDate = CONVERT(VARCHAR(20),GETDATE(),112)
SET @path = '\\noc2-storage\IT_Backup\Weekly_SQL\CDADB1\' + @fileDate;
DECLARE db_cursor CURSOR FOR
SELECT name
FROM master.dbo.sysdatabases
WHERE name NOT IN ('master','model','msdb','tempdb') -- exclude these databases
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @name
WHILE @@FETCH_STATUS = 0
BEGIN
IF NOT EXISTS (SELECT 1 FROM @DirTree WHERE subdirectory = @path)
EXEC master.dbo.xp_create_subdir @path
SET @fileName = @path + @name + '_' + @fileDate + '.BAK'
BACKUP DATABASE @name TO DISK = @filename
FETCH NEXT FROM db_cursor INTO @name
END
CLOSE db_cursor
DEALLOCATE db_cursor
先感谢您
你为什么要重新发明轮子......因为重新发明它是有成本的!
您还使用不推荐使用的东西,例如
sysdatabases
.. 而不是使用sys.databases
.你应该使用 -
两者都是免费的,并且经过社区的良好测试。
您的
@DirTree
表变量中没有信息。您声明了变量,但您从不向其中插入任何信息。之后,您
IF NOT EXISTS
正在尝试从表变量中选择某些内容并在 上进行匹配@path
,但根据您提供的代码,该表中没有记录。附带说明一下,Ola 有很棒的备份脚本,可以减轻你的很多痛苦,并且网络上有自动恢复过程,可以使用 Ola 的解决方案。
我们的主和救主的网站