手动备份SQLEXPRESS名称中的日期和时间。

时间:2014-05-22 13:44:39

标签: tsql sqlcmd

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。谢谢你的答案。

3 个答案:

答案 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