尝试并未能编写每天恢复SQL数据库备份文件的脚本。
文件备份采用以下格式Backup_28_04_2020。我需要脚本来获取最新文件并将其还原到名为[CallDatabase]的数据库中。它的日期让我失望,因为它每天都在变化。
感谢任何帮助。
DB是SQL Server 2016。
我正在下面尝试的脚本。脚本正在解析,但失败,并出现以下错误。
“将数据类型varchar转换为nvarchar时出错。[SQLSTATE 42000](错误8114)。该步骤失败。“
DECLARE @FileName varchar(255), @PathToBackup varchar(255), @RestoreFilePath varchar(1000)
DECLARE @Files TABLE (subdirectory varchar(255), depth int, [file] int)
SET NOCOUNT ON
SET @PathToBackup = 'H:\'
-- insert into our memory table using dir tree and a single file level
INSERT INTO @Files
EXEC master.dbo.xp_DirTree @PathToBackup,1,1
SELECT TOP 1
@FileName = [subdirectory]
FROM
@Files
WHERE
-- get where it is a file
[file] = 1
AND
subdirectory LIKE 'Backup_%.bak'
ORDER BY
-- order descending so newest file will be first by naming convention
subdirectory DESC
IF LEFT(REVERSE(@PathToBackup), 1) != '\'
BEGIN
SET @PathToBackup = @PathToBackup + '\'
END
SET @RestoreFilePath = @PathToBackup + @FileName
SELECT @RestoreFilePath
RESTORE DATABASE [CallDatabase]
FROM DISK = @RestoreFilePath
WITH FILE = 1, NOUNLOAD, REPLACE, STATS = 10
我认为您在还原数据库时需要提供更多详细信息。另外,将delcare @RestoreFilePath
设置为nvarchar (1000)
:
DECLARE @DBNAME SYSNAME = 'CallDatabase' --'DBName'
DECLARE @DATA NVARCHAR(MAX) = 'H:\' + @DBNAME + '.mdf' --'Path of data file'
DECLARE @LOG NVARCHAR(MAX) = 'H:\' + @DBNAME + '.ldf' --'Path of log file'
RESTORE DATABASE [CallDatabase]
FROM DISK = @RestoreFilePath
WITH FILE = 1,
MOVE N'CallDatabase_Data' TO @DATA,
MOVE N'CallDatabase_Log' TO @LOG,
NOUNLOAD, REPLACE, STATS = 10
HTH。