1. 动态创建目录
DECLARE @PATH NVARCHAR(MAX)
DECLARE @Bcp NVARCHAR(100)
EXEC sp_configure 'show advanced options', 1
RECONFIGURE
EXEC sp_configure 'xp_cmdshell', 1
RECONFIGURE
SET @PATH = 'E:/SQLSERVER/' + CONVERT(NVARCHAR(10), GETDATE(), 120)
SET @Bcp = 'MD ' + @PATH
EXEC MASTER..XP_CMDSHELL @Bcp
EXEC sp_configure 'show advanced options', 1
RECONFIGURE
EXEC sp_configure 'xp_cmdshell', 0
RECONFIGURE
EXEC sp_configure 'show advanced options', 0
RECONFIGURE
2. 动态备份数据库
DECLARE @Backup_dir NVARCHAR(MAX)
DECLARE @Database_Name NVARCHAR(100)
DECLARE database_cursor CURSOR FOR SELECT name from MASTER.SYS.DATABASES WHERE database_id >= 5
OPEN database_cursor
FETCH NEXT FROM database_cursor INTO @Database_Name
WHILE @@FETCH_STATUS = 0
BEGIN
SET @Backup_dir = 'E:/SQLSERVER/' + CONVERT(NVARCHAR(10),GETDATE(),120) + '/' + @Database_Name + '.BAK'
declare @sql nvarchar(1000)
set @sql = 'BACKUP DATABASE ' + '[' + @Database_Name + ']' + ' TO DISK = ' + '''' + @Backup_dir + ''''
exec (@sql)
FETCH NEXT FROM database_cursor INTO @Database_Name
END
CLOSE database_cursor
DEALLOCATE database_cursor --Release
这里有几点需要说明一下
1. DECLARE database_cursor CURSOR FOR SELECT name from MASTER.SYS.DATABASES WHERE database_id >= 5 , 在sql server里面, 前四个都是系统数据库, 一般都用不着备份的。
2. set @sql = 'BACKUP DATABASE ' + '[' + @Database_Name + ']' + ' TO DISK = ' + '''' + @Backup_dir + ''''
exec (@sql)
那'[' ... ']' 是必须的,因为数据库名是允许使用 '-'的, 仔细想想吧 backup database A-B....
最后的那 '''' 一对四个单引号也是必须的, 主要是为了将目录用单引号包起来,不然就是to disk = e:/sqlserver......... 而需要的是 to disk = 'E:/sqlserver....'
exec (sql) 是执行动态sql的,因为数据库名是在变化的