恢复数据库:FROM DISK =变量+字符串->'+'附近的语法不正确

时间:2019-10-10 07:43:41

标签: sql-server tsql

我的目的是拥有一个从备份文件还原数据库的脚本。

USE [master]

DECLARE @backupsFolder NVARCHAR(256) = N'C:\DatabaseBackups\'

RESTORE DATABASE [MY_DB] FROM  DISK = @backupsFolder + 'MY_DB.bak'enter code here

执行时出现错误:

  

“ +”附近的语法不正确。

问题仅在路径被串联时。只有变量或只有字符串才能正常工作。 我试过也用方括号括起来->仍然不起作用。 添加这样的变量对我来说并不重要:

DECLARE @bakPath NVARCHAR(256) = @backupsFolder + 'MY_DB.bak'

有趣的是,为什么SQL Server不允许我在DISK =之后立即连接值?

1 个答案:

答案 0 :(得分:0)

您将必须使用动态SQL来执行此操作。这应该足以让您入门:

DECLARE @backupsFolder NVARCHAR(256) = N'C:\DatabaseBackups\'
DECLARE @SQL nvarchar(MAX);

SET @SQL = N'RESTORE DATABASE [MY_DB] FROM  DISK = ' + REPLACE(@backupsFolder,N'''',N'''''') + 'MY_DB.bak --enter code here';

EXEC sp_executesql @SQL;

请注意,我通常会使用QUOTENAME而不是REPLACE来最小化注入,但是文件路径可以(并且确实)具有128个以上的字符。