2010-03-09 31 views
24

Tôi đang sử dụng bên dưới để sao lưu một db từ một công việc SQL. Ai đó có thể cho tôi biết làm thế nào để thêm ngày hiện tại vào tên tập tin đầu ra? Tốt hơn là ở định dạng YYYYMMDD.Thêm ngày vào tên tệp sao lưu cơ sở dữ liệu SQL

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

Cảm ơn!

Trả lời

36
DECLARE @MyFileName varchar(1000) 

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

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

mã không hoạt động –

+0

bây giờ mã của bạn hoạt động ngay bây giờ bạn đã chỉnh sửa mã. Cảm ơn mặc dù đã chỉnh sửa câu trả lời của tôi và cảm ơn oh vì đã xóa điểm tôi đã được trao. – CResults

+4

Điều đó làm cho một số đọc giải trí, cảm ơn các chaps. – Shawson

7

Hãy thử điều này.

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

112 trong Chuyển đổi cung cấp cho bạn các định dạng YYYYMMDD

2

Sử dụng sau

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 

Đọc trên Cast và Chuyển đổi đây http://msdn.microsoft.com/en-us/library/ms187928.aspx

14

Nếu bạn muốn bao gồm ngày và thời gian, vì vậy bạn có thể sử dụng:

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

120 trong Chuyển đổi mang đến cho bạn yyyy-mm-dd hh: mi: ss (24h)

Chức năng REPLACE là necesary vì tên tập tin không thể có nhân vật:

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

đầu ra :

C: \ Projects \ myDatabase 03 tháng 6 năm 2015 6,33AM.bak

1

Có lẽ bạn muốn sử dụng cửa sổ nhiệm vụ, chỉ cần đặt mã trong một file bat và thêm vào các nhiệm vụ Windows của bạn:

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" 

Đó là một chút dài, nhưng tôi nghĩ rằng đó là một giải pháp thực tế, nếu bạn cần sao lưu máy chủ sql 2005 hoặc phiên bản oldie, chỉ cần thay đổi sqlcmd bởi osql .

Các vấn đề liên quan