2010-03-09 4 views
24

J'utilise ce qui suit pour sauvegarder une base de données à partir d'un travail SQL. Quelqu'un peut-il me dire comment ajouter la date actuelle au nom de fichier de sortie? De préférence au format AAAAMMJJ.Ajout de la date au nom de la sauvegarde de la base de données SQL

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

Merci!

Répondre

36
DECLARE @MyFileName varchar(1000) 

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

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

le code ne fonctionne pas –

+0

urh votre code fonctionne maintenant que vous l'avez édité. Merci pour avoir édité ma réponse et merci d'avoir supprimé le point que j'avais reçu. – CResults

+4

Cela fait une lecture amusante, merci les gars. – Shawson

7

Essayez ceci.

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

112 dans le Convert vous donne le format AAAAMMJJ

2

Utilisez les éléments suivants

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 

Lire sur Cast et convertir ici http://msdn.microsoft.com/en-us/library/ms187928.aspx

14

Si vous souhaitez inclure la date et le temps, de sorte que vous pouvez utiliser:

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

Le 120 Convert vous donne le aaaa-mm-jj hh: mi: ss (24h)

La fonction Replace est necesary parce que le nom de fichier ne peut pas a le caractère:

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

sortie :

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

1

Peut-être que vous voulez utiliser la tâche windows, juste mettre le code dans un fichier de chauve-souris et ajouter à vos tâches 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" 

Il est un peu long, mais je pense que c'est une solution pratique, si vous avez besoin sql backup 2005 ou versions oldie, il suffit de changer sqlcmd par osql .

Questions connexes