【发布时间】:2018-08-08 11:48:34
【问题描述】:
我正在尝试获取一个每日 .bak 文件,该文件具有静态名称,但文件名中的日期和时间戳格式为“Filename_yyyyMMdd_hhmm.bak”。
如果我手动输入时间来匹配文件,我创建的脚本可以工作,但是当我尝试自动化它时,它不会工作,因为生成文件时时间会改变(通常只有几分钟的时间。
有人可以帮助解决这个问题吗?
DECLARE @BackupFile varchar(1000)
SELECT @BackupFile = SELECT '\NETWORKLOCATION\FILENAME_' + FORMAT(CAST(GETDATE() AS date),'yyyyMMdd') + '_HHmm.bak')
RESTORE DATABASE [Test]
FROM DISK = @BackupFile
WITH REPLACE
我正在使用 SQL Server。
【问题讨论】:
-
您无需将
GETDATE()转换为日期。不过,这个问题令人困惑——您没有指定 time ,因此您无法从任何包含时间元素的文件中恢复。如果不指定时间,你将如何确定当天恢复哪个文件? -
请说明您想做什么,而不是您认为可以如何完成。如果一天有 5 个备份,您要恢复哪一个? 恢复也不是盲目的。您是否正在使用备份作为复制数据库的一种方式?为什么不创建一个脚本,将数据库备份到一个特定文件中,然后将它从该文件恢复到另一个服务器?
-
您好 Panagiotis - 感谢您的回复。我们每天早上从一家外部公司收到一个文件,该文件进入一个包含大约 4 天文件的文件夹,所以我试图将最新文件拉入数据库。我可以得到文件的正确日期(因为最新的总是今天),但是因为文件的生成时间也在文件名中,而且这可能会有所不同,我似乎无法将时间写入脚本。
-
尝试 sp_DatabaseRestore。在尝试恢复之前,它会列出并解析文件名以找到最新的文件名。我复制了在我的答案中显示文件列表是如何生成的 sn-p。特定数据库名称的 最新 文件是具有
MAX()文件名的文件 -
谢谢 - 我会试一试。我对这一切都很陌生,所以只是想弄清楚这一切。
标签: sql-server database datetime filenames restore