我的目的是拥有一个从备份文件还原数据库的脚本。
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 =之后立即连接值?
答案 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个以上的字符。