Tsql 手动备份SQLEXPRESS名称中的日期和时间。
sql.sqlTsql 手动备份SQLEXPRESS名称中的日期和时间。,tsql,sqlcmd,Tsql,Sqlcmd,sql.sql DECLARE@pathName-NVARCHAR(512) SET@pathName='l:\Backup\db\u Backup'+Convert(varchar(17),GETDATE(),120)+'.bak' 备份数据库mydatabase TO DISK=@pathName WITH NOFORMAT,NOINIT,NAME=N'db_BACKUP',SKIP,NOREWIND,NOUNLOAD,STATS=10 备份.bat sqlcmd -S mycomp\SQL
DECLARE@pathName-NVARCHAR(512)
SET@pathName='l:\Backup\db\u Backup'+Convert(varchar(17),GETDATE(),120)+'.bak'
备份数据库mydatabase TO DISK=@pathName WITH NOFORMAT,NOINIT,NAME=N'db_BACKUP',SKIP,NOREWIND,NOUNLOAD,STATS=10
备份.bat
sqlcmd -S mycomp\SQLEXPRESS -U sa -P password -i sql.sql
输出备份格式如下所示:l:\backup\db\u backup\u 2014-05-22 17??
为什么不显示分、秒和分机“.bak”。我需要以格式显示日期和时间:YYYY-MM-DD HH-MM-SS。谢谢你的回答。你没有时间了,因为这句话:
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
因为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
您的转换为short,您需要varchar(19)而不是varchar(17),并且您需要将:替换为-
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
我非常感谢你,没问题。如果这是一个有用的答案,请考虑接受和接受。