declare @databasename nvarchar(50),
@timestamp nvarchar(50),
@sqlcmd nvarchar(1000)
set @databasename = (select min(name)
from sys.databases
where name not in ('master','model','tempdb','msdb'))
while @databasename is not null
begin
set @timestamp = replace(replace(replace(convert(nvarchar,getdate()),' ','_'),':','_'),'-',' ')
set @sqlcmd = 'BACKUP DATABASE '+@databasename+' TO DSIK=' + ' C:\Program Files (x86)\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Backup\'+ @databasename +'_'+@timestamp+'.bkp'
exec (@sqlcmd)
set @databasename = (select min(name)
from sys.databases
where name not in ('master','model','msdb','tempdb')
and name > @databasename)
end;
go
答案 0 :(得分:0)
(1) TO DSIK
应 TO DISK
(2) C:\Prog...
部分应包含在撇号中。因此,您最好在path + filename
的开头和结尾使用三个撇号,例如 '''C:\Prog...' + ... + ... + '.bkp'''
。
(3)正确解析的查询应该是这样的(不要忘记用正确的路径替换 C:\Prog...
部分):
declare
@databasename nvarchar(50),
@timestamp nvarchar(50),
@sqlcmd nvarchar(1000)
;
set @databasename=
(select min(name) from sys.databases
where name not in ('master','model','tempdb','msdb'))
;
while @databasename is not null
begin
set @timestamp= replace(replace(replace(convert(nvarchar,getdate()),' ','_'),':','_'),'-',' ');
set @sqlcmd ='BACKUP DATABASE '+@databasename+' TO DISK=' + '''C:\Prog...' + @databasename +'_'+@timestamp+'.bkp''';
exec (@sqlcmd);
set @databasename=(select min(name) from sys.databases where name not in ('master','model','msdb','tempdb')and name > @databasename);
end
;
(4)最好用“ ;
”结束每一行(完整命令)。