只应为任何逻辑文件名指定一个 WITH MOVE 子句

Lum*_*mpy 2 sql-server-2008 sql-server backup stored-procedures

我正在尝试通过编写备份和还原脚本来复制数据库。我的备份程序工作正常,但我不断收到错误消息

已为文件指定了冲突的文件重定位。只应为任何逻辑文件名指定一个 WITH MOVE 子句。

当我运行该程序进行还原时。

这是程序代码。谁能发现我的错误是什么?

ALTER PROCEDURE spDBRestore (@BackupName NVARCHAR(50), @RestoreName NVARCHAR(50))
AS 
BEGIN
DECLARE @BackupPath NVARCHAR(4000) = 'S:\MSSQL10_50.MSSQLSERVER\MSSQL\Backup\TemplateCopy\'+@BackupName+'.BAK',
@NewDBFileName NVARCHAR(4000) = 'S:\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\'+@RestoreName+'.mdf',
@NewLFFileName NVARCHAR(4000) = 'L:\MSSQL10_50.MSSQLSERVER\MSSQL\Data\'+@RestoreName+'_1.ldf'
select @BackupName, @RestoreName, @NewDBFileName, @newlffilename
RESTORE DATABASE @RestoreName
FROM DISK = @BackupPath
WITH FILE = 1,
MOVE @BackupName TO @NewDBFileName,
MOVE @BackupName TO @NewLFFileName,
NOUNLOAD,
REPLACE;

END
Run Code Online (Sandbox Code Playgroud)

Tho*_*ger 5

您不应该移动备份文件,该MOVE子句将逻辑数据库文件名作为第一个参数,然后TO ...是相应数据库文件的目标物理文件名。

RESTORE 上的 BOL 参考

移动 'logical_file_name_in_backup' 到 'operating_system_file_name' [ ...n ]

指定逻辑名称由logical_file_name_in_backup 指定的数据或日志文件应通过将其恢复到由operating_system_file_name 指定的位置来移动。创建备份集时,备份集中的数据或日志文件的逻辑文件名与其在数据库中的逻辑名相匹配。

您可以从RESTORE FILELISTONLY(注意,LogicalName结果集中的列)检索数据库文件的逻辑文件名。