EXECUTE sp_msforeachdb 'USE [?] IF DB_NAME() NOT IN(''master'',''msdb'',''tempdb'',''model'')
BACKUP DATABASE [?] TO DISK = ''d:\?_'+CONVERT(NVARCHAR(8),getdate(),112) + '.bak'' WITH INIT'这个
CONVERT(NVARCHAR(8),getdate(),112) 貌似拼接有问题。EXECUTE sp_msforeachdb 'USE [?] IF DB_NAME() NOT IN(''master'',''msdb'',''tempdb'',''model'')
BACKUP DATABASE [?] TO DISK = ''d:\?_12312321.bak'' WITH INIT' 这样是对的。
求解怎么拼?
BACKUP DATABASE [?] TO DISK = ''d:\?_'+CONVERT(NVARCHAR(8),getdate(),112) + '.bak'' WITH INIT'这个
CONVERT(NVARCHAR(8),getdate(),112) 貌似拼接有问题。EXECUTE sp_msforeachdb 'USE [?] IF DB_NAME() NOT IN(''master'',''msdb'',''tempdb'',''model'')
BACKUP DATABASE [?] TO DISK = ''d:\?_12312321.bak'' WITH INIT' 这样是对的。
求解怎么拼?
DECLARE @path NVARCHAR(4000)
set @path='D:\'
SET NOCOUNT ON;
DECLARE @name nvarchar(50);
DECLARE vendor_cursor CURSOR FOR
SELECT name
FROM sys.databases
WHERE database_id NOT IN (1,2,3,4)
OPEN vendor_cursor
FETCH NEXT FROM vendor_cursor
INTO @name
WHILE @@FETCH_STATUS = 0
BEGIN
SET @sql='BACKUP DATABASE '+ @name+' TO DISK='+''''+@path+@name+CONVERT(VARCHAR(8),GETDATE(),112)+'.bak'''
exec (@sql)
FETCH NEXT FROM vendor_cursor
INTO @name
END
CLOSE vendor_cursor;
DEALLOCATE vendor_cursor;
DECLARE @path NVARCHAR(4000)
set @path='D:\'
SET NOCOUNT ON;
DECLARE @name nvarchar(50);
DECLARE vendor_cursor CURSOR FOR
SELECT name
FROM sys.databases
WHERE database_id NOT IN (1,2,3,4)
OPEN vendor_cursor
FETCH NEXT FROM vendor_cursor
INTO @name
WHILE @@FETCH_STATUS = 0
BEGIN
SET @sql='BACKUP DATABASE '+ @name+' TO DISK='+''''+@path+@name+'_'+CONVERT(VARCHAR(8),GETDATE(),112)+'.bak'''
exec (@sql)
FETCH NEXT FROM vendor_cursor
INTO @name
END
CLOSE vendor_cursor;
DEALLOCATE vendor_cursor;
as
DECLARE @SQL NVARCHAR(4000)
DECLARE @path NVARCHAR(4000)
set @path='D:\'
SET NOCOUNT ON;
DECLARE @name nvarchar(50);
DECLARE vendor_cursor CURSOR FOR
SELECT name
FROM sys.databases
WHERE database_id NOT IN (1,2,3,4)
OPEN vendor_cursor
FETCH NEXT FROM vendor_cursor
INTO @name
WHILE @@FETCH_STATUS = 0
BEGIN
SET @sql='BACKUP DATABASE '+ @name+' TO DISK='+''''+@path+@name+'_'+CONVERT(VARCHAR(8),GETDATE(),112)+'.bak'''
exec (@sql)
FETCH NEXT FROM vendor_cursor
INTO @name
END
CLOSE vendor_cursor;
DEALLOCATE vendor_cursor;
执行万上面语句后,然后
exec Backup_Script
改成这样就可以了哈,其实主要的问题在于sp_msforeachdb参数,不能接受通过+号,来拼接字符串:declare @sql nvarchar(max)set @sql = 'USE [?] IF DB_NAME() NOT IN(''master'',''msdb'',''tempdb'',''model'')
BACKUP DATABASE [?] TO DISK = ''d:\?_'+CONVERT(NVARCHAR(8),getdate(),112) + '.bak'' WITH INIT'--select @sql
/*
USE [?] IF DB_NAME() NOT IN('master','msdb','tempdb','model') BACKUP DATABASE [?] TO DISK = 'd:\?_20131108.bak' WITH INIT
*/EXECUTE sp_msforeachdb @sql
/*(1 行受影响)
已为数据库 'ReportServer',文件 'ReportServer' (位于文件 1 上)处理了 424 页。
已为数据库 'ReportServer',文件 'ReportServer_log' (位于文件 1 上)处理了 1 页。
BACKUP DATABASE 成功处理了 425 页,花费 0.416 秒(7.981 MB/秒)。
已为数据库 'ReportServerTempDB',文件 'ReportServerTempDB' (位于文件 1 上)处理了 184 页。
已为数据库 'ReportServerTempDB',文件 'ReportServerTempDB_log' (位于文件 1 上)处理了 1 页。
BACKUP DATABASE 成功处理了 185 页,花费 0.420 秒(3.441 MB/秒)。
已为数据库 'ttt',文件 'master' (位于文件 1 上)处理了 440 页。
已为数据库 'ttt',文件 'mastlog' (位于文件 1 上)处理了 1 页。
BACKUP DATABASE 成功处理了 441 页,花费 0.322 秒(10.699 MB/秒)。
已为数据库 'netdb',文件 'netdb' (位于文件 1 上)处理了 704 页。
已为数据库 'netdb',文件 'netdb_log' (位于文件 1 上)处理了 1 页。
BACKUP DATABASE 成功处理了 705 页,花费 1.347 秒(4.088 MB/秒)。
*/