2010-03-09 14 views
24

Sto utilizzando il seguente per il backup di un db da un processo SQL. Qualcuno può dirmi come aggiungere la data corrente al nome file di output? Preferibilmente nel formato AAAAMMGG.Aggiungi data per SQL backup del database nome

BACKUP DATABASE [myDB] TO  DISK = N'\\myPath\myDB.bak' WITH NOFORMAT, INIT,  NAME = N'myDB', SKIP, REWIND, NOUNLOAD,  STATS = 10 
GO 

Grazie!

risposta

36
DECLARE @MyFileName varchar(1000) 

SELECT @MyFileName = (SELECT '\\ServerToSave\Path\MyDB_' + convert(varchar(500),GetDate(),112) + '.bak') 

BACKUP DATABASE [myDB] TO [email protected] ... 
+1

codice non funziona –

+0

Urh il codice funziona ora che hai modificato esso. Grazie per aver modificato la mia risposta e oh grazie per aver rimosso il punto che mi era stato assegnato. – CResults

+4

che ha fatto per qualche lettura divertente, screpolature grazie. – Shawson

7

Prova questo.

DECLARE @MyFileName varchar(50) 
SELECT '\\ServerToSave\Path\MyDB_' + convert(nvarchar(20),GetDate(),112) + '.bak' 
BACKUP DATABASE [myDB] TO [email protected] ... 

Il 112 nel Converti ti dà il formato AAAAMMGG

2

Utilizza il seguente

DECLARE @BackupFileName varchar(20) 

SELECT @BackupFileName = '\\ServerName\SharedFolder\DatabaseName_' + CONVERT (VarChar, GetDate(), 112) + '.bak' 

BACKUP DATABASE [myDB] TO DISK = @BackupFileName WITH NOFORMAT, INIT, NAME = N'myDB', SKIP, REWIND, NOUNLOAD, STATS = 10 

Leggi su Fusioni e Convertire qui http://msdn.microsoft.com/en-us/library/ms187928.aspx

14

Se si desidera includere la data e il tempo, in modo da poter utilizzare:

DECLARE @MyFileName varchar(200) 
SELECT @MyFileName='\\ServerToSave\Path\MyDB_' + REPLACE(convert(nvarchar(20),GetDate(),120),':','-') + '.bak' 
BACKUP DATABASE [myDB] TO [email protected] ... 

Il 120 nel Converti ti dà l'aaaa-mm-gg hh: mi: ss (24h)

La funzione REPLACE è necesary perché il nome del file non può ha il carattere:

0
DECLARE @var nvarchar(max) ='C:\Projects\myDatabase ' +replace(rtrim(convert(char,getdate())), ':',',')+'.bak'; 
BACKUP DATABASE myDatabase TO DISK = @var 

uscita :

C: \ Projects \ myDatabase 3 Giugno 2015 6,33AM.bak

1

Forse si desidera utilizzare delle applicazioni di Windows, basta mettere il codice in un file bat e aggiungere le attività di Windows:

for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a" 
set "YY=%dt:~2,2%" & set "YYYY=%dt:~0,4%" & set "MM=%dt:~4,2%" & set "DD=%dt:~6,2%" 
set "HH=%dt:~8,2%" & set "Min=%dt:~10,2%" & set "Sec=%dt:~12,2%" 

set "fullstamp=%YYYY%%MM%%DD%-%HH%%Min%%Sec%" 
set bkfile=dbname%fullstamp%.bak 
set path_sqlcmd="C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\110\Tools\Binn\SQLCMD.exe" 

%path_sqlcmd% -S .\SQLEXPRESS -E -Q "BACKUP DATABASE seteo TO DISK='D:\bk-sqlserver\%bkfile%' WITH FORMAT" 

E 'un po' lungo, ma penso che sia una soluzione pratica, se avete bisogno di sql server di backup 2005 o versioni oldie, basta cambiare sqlcmd da osql .

Problemi correlati