2016-03-08 83 views
0

我有用于备份数据库的批处理/ sql脚本对。我最近进入文件夹来获取数据库,我发现它没有工作。我检查了我的批处理脚本,它不是在一天或一个月里给我看,但是这一年显示为“开启”!我的SQL脚本工作正常,我想补充说我的批处理脚本用于工作。命令提示符回显日期不会返回

这里是我的批处理脚本

FOR /F "TOKENS=1* DELIMS= " %%A IN ('DATE/T') DO SET CDATE=%%B 
FOR /F "TOKENS=1,2 eol=/ DELIMS=/ " %%A IN ('DATE/T') DO SET mm=%%B 
FOR /F "TOKENS=1,2 DELIMS=/ eol=/" %%A IN ('echo %CDATE%') DO SET dd=%%B 
FOR /F "TOKENS=2,3 DELIMS=/ " %%A IN ('echo %CDATE%') DO SET yyyy=%%B 
SET date=%dd%-%mm%-%yyyy% 

rem day month year check 
echo %dd% 
echo %mm% 
echo %yyyy% 

echo %date% 

mkdir %date% 

sqlcmd -S .\SQLEXPRESS -i backupQuery.sql 

,这里是“backupQuery.sql”

DECLARE @BackupLocation AS NVARCHAR(255) = 'C:\SQL\backups\' 

/* Set @CurrentDate to a timestamp in mmddyyyy form */ 
DECLARE @CurrentDate AS NVARCHAR(255) 

SET @CurrentDate = REPLICATE('0', 2 - LEN(CAST(DAY(GETDATE()) AS NVARCHAR))) /*day number 1*/ 

+ 

CAST(DAY(GETDATE()) AS NVARCHAR) /*day number 2*/ 

+ '-' + 

REPLICATE('0', 2 - LEN(CAST(MONTH(GETDATE()) AS NVARCHAR))) /*month number 1*/ 

+ 

CAST(MONTH(GETDATE()) AS NVARCHAR) /*month number 1*/ 

+ '-' + 

CAST(YEAR(GETDATE()) AS NVARCHAR) /*year*/ 

DECLARE @DatabaseName AS NVARCHAR(255) 

/* Get all databases except for the temporary database */ 
DECLARE Databases CURSOR FOR 
SELECT name 
FROM sys.databases 
WHERE name 
NOT IN 
('tempdb', 
'master', 
'model', 
'msdb') 

OPEN Databases 

FETCH NEXT FROM Databases 
INTO @DatabaseName 

WHILE @@FETCH_STATUS = 0 
BEGIN 
    DECLARE @Command AS NVARCHAR(MAX) 
    SET @Command = 'BACKUP DATABASE ' + QUOTENAME(@DatabaseName) + ' TO DISK = ''' + 
     @BackupLocation + @CurrentDate + '\' + @DatabaseName + '.BAK''' 
    EXEC(@Command) 
    FETCH NEXT FROM Databases 
    INTO @DatabaseName 
END 

CLOSE Databases 
DEALLOCATE Databases 

他们命中注定要备份到当前日期命名的目录,但它的到来通过为 - -上?!

+0

'%date%'是一个内置变量(在'cmd'中),所以覆盖它是一个坏主意!打开一个新的'cmd'窗口并输入'%date%',这样你会看到它返回当前日期;所以为你的代码使用一个不同的变量名称... – aschipfl

回答

0

我自己和@aschipfl设法解决这个问题,我相信这是因为我重新分配了一个系统变量。我所要做的只是在我的SQL中使用DATE CONVERT格式6,并在cmd中使用%date%变量。这解决了它,我现在有一个格式为dd-MMM-yy。