.bak文件,我想一个数据库备份文件名.bak恢复到服务器,但也有不同的时间戳几.bak文件,例如:选择具有最新时间戳
dbname_backup_201210290200.bak
dbname_backup_201210300212.bak
dbname_backup_201210310213.bak
.bak文件,我想一个数据库备份文件名.bak恢复到服务器,但也有不同的时间戳几.bak文件,例如:选择具有最新时间戳
dbname_backup_201210290200.bak
dbname_backup_201210300212.bak
dbname_backup_201210310213.bak
假设xp_cmdshell的启用,所有文件将yyyyMMddhhmm.bak结束:
CREATE TABLE #x(n VARCHAR(2048));
DECLARE @cmd VARCHAR(2048), @fn VARCHAR(2048), @folder VARCHAR(255);
SET @folder = 'E:\sqlbackup\MerchantAPIReport\'; --'
SET @cmd = 'dir /b "' + @folder + 'MerchantAPIReport_backup_*.bak"';
INSERT #x EXEC master..xp_cmdshell @cmd;
SELECT TOP (1) @fn = @folder + n
FROM #x
ORDER BY CONVERT(DATETIME,
STUFF(STUFF(LEFT(RIGHT(n, 16), 12), 11, 0, ':'), 9, 0, ' '))
DESC;
-- whatever you do, don't try to construct this yourself.
-- I'll fill in the blanks for you. <sigh>
RESTORE DATABASE [MerchantAPIReport] FROM DISK = @fn
WITH FILE = 1,
MOVE N'MerchantAPIReport' TO N'D:\SQLData01\MerchantAPIReport.mdf',
MOVE N'MerchantAPIReport_log' TO N'F:\SQLLog\MerchantAPIReport.ldf',
NOUNLOAD, REPLACE, STATS = 10;
-- RESTORE DATABASE ... FROM @fn ...; -- fill in the rest here
DROP TABLE #x;
@ user1484403你检查我是否正确复制了你的文件夹名?你检查了#x中包含的内容吗? –
@ user1484403对不起,但我不明白你实际想保留哪部分问题。如果你只是想要带有最新时间戳的.bak文件,我所提供的代码应该是你所需要的。如果还有其他要求没有说明,请说出来或者提出一个新问题。 –
对不起,我有juz编辑到另一个版本 – user1484403
[请不要使用'varchar'而不指定长度](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/09/bad-habits-to-kick-declaring-varchar -without-length.aspx)。另外,为什么你需要从T-SQL内部做到这一点? PowerShell或C#在回答诸如“让我使用特定文件夹中的特定扩展名的最新文件中的文件名”中配置好得多。 –
这个问题没用,但仍然出现在谷歌搜索... smh –