Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 选择带有最新时间戳的.bak文件_Sql Server_Database_Backup_Restore - Fatal编程技术网

Sql server 选择带有最新时间戳的.bak文件

Sql server 选择带有最新时间戳的.bak文件,sql-server,database,backup,restore,Sql Server,Database,Backup,Restore,我想将数据库备份文件.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 V

我想将数据库备份文件.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;

. 另外,为什么需要从T-SQL内部执行此操作?PowerShell或C在回答诸如“从给定文件夹中具有特定扩展名的最新文件中获取部分文件名”之类的问题方面有更好的能力。这个问题毫无用处,但在谷歌搜索中仍然会出现。。。smh@user1484403你是否检查过我是否正确复制了你的文件夹名?你检查了x中包含的内容了吗?@user1484403对不起,我不明白你想保留问题的哪一部分。如果您只需要带有最新时间戳的.bak文件,那么我提供的代码应该就是您所需要的全部。如果您还没有说明其他要求,请说明这些要求或开始一个新问题。很抱歉,我已将juz编辑为其他版本