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

问题描述

我的目的是拥有从备份文件恢复数据库的脚本。

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 = 之后立即连接值?

标签: sql-servertsql

解决方案


您必须使用动态 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 个字符。


推荐阅读