SQL Server我练习这段代码,但没有执行

时间:2015-01-17 08:26:08

标签: sql-server-2008-r2 sql-server-2012

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

1 个答案:

答案 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)最好用“ ; ”结束每一行(完整命令)。