sql.sql
DECLARE @pathName NVARCHAR(512) SET @pathName = 'l:\Backup\db_backup_' + Convert(varchar(17), GETDATE(), 120) + '.bak' BACKUP DATABASE mydatabase TO DISK = @pathName WITH NOFORMAT, NOINIT, NAME = N'db_backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10
BACKUP.BAT
sqlcmd -S mycomp\SQLEXPRESS -U sa -P password -i sql.sql
输出备份格式如下: l:\ Backup \ db_backup_2014-05-22 17 ?? 为什么不显示分钟,秒和扩展名“.bak”。我需要以下列格式显示日期和时间:YYYY-MM-DD HH-MM-SS。谢谢你的答案。
答案 0 :(得分:0)
你没有得到秒,因为这句话:
Convert(varchar(17), GETDATE(), 120)
将字符串停止在17个字符处,这个字符长度不足以包含您想要的所有数据。尝试
Convert(varchar(19), GETDATE(), 120)
相反。
至于你的文件名被截断的事实,这可能是因为它包含冒号,这在文件路径和名称中是非法的。试试这个。
Replace(Convert(varchar(19), GETDATE(), 120), ':', '_')
总而言之,您的SQL必须是:
DECLARE @pathName NVARCHAR(512)
SET @pathName = 'l:\Backup\db_backup_' + REPLACE(CONVERT(VARCHAR(19), GETDATE(), 120), ':', '_') + '.bak'
BACKUP DATABASE mydatabase TO DISK = @pathName
WITH NOFORMAT
,NOINIT
,NAME = N'db_backup'
,SKIP
,NOREWIND
,NOUNLOAD
,STATS = 10
答案 1 :(得分:0)
你正在砍掉秒,因为varchar(17)的长度不足以容纳它们。此外,您不能在文件名中包含冒号。
试试这个
DECLARE @pathName NVARCHAR(512)
SET @pathName = 'l:\Backup\db_backup_' +
REPLACE(CONVERT(varchar(19), GETDATE(), 120), ':','-') + '.bak'
BACKUP DATABASE mydatabase TO DISK = @pathName
WITH NOFORMAT, NOINIT, NAME = N'db_backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10
答案 2 :(得分:0)
你的转换是简短的,你需要varchar(19)而不是varchar(17),你需要替换:with -
DECLARE @pathName NVARCHAR(512)
SET @pathName = 'l:\Backup\db_backup_' + SELECT REPLACE(CONVERT(varchar(19), GETDATE(), 120), ':','-') + '.bak'
BACKUP DATABASE mydatabase TO DISK = @pathName WITH NOFORMAT, NOINIT, NAME = N'db_backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10