迁移时恢复多个BAK文件遇SQL语法错误求助
修复SQL恢复语句生成脚本的语法错误
原脚本的问题集中在字符串拼接的单引号转义错误、变量引用方式错误以及路径书写错误,以下是修正后的完整脚本:
DECLARE @datapath VARCHAR(512) SET @Datapath = 'C:\Program Files\Microsoft SQL Server\MSSQL14\MSSQL\DATA\' SELECT 'USE master; RESTORE Database [' + DBName + '] FROM DISK = ''' + 'C:\SQLBackup\' + DBName + '.bak''' + ' WITH FILE = 1, MOVE N''' + DBName + '_DATA''' + ' TO ''' + @datapath + DBName + '_DATA.mdf'', MOVE N''' + DBName + '_LOG''' + ' TO ''' + @datapath + DBName + '_LOG.ldf'', NOUNLOAD, STATS = 5;' FROM (SELECT db.name AS DBName FROM sys.databases db WHERE name NOT IN ('master', 'model', 'msdb', 'tempdb')) D
错误点说明:
- 路径缺失反斜杠:原脚本中备份路径写为
C:SQLBackup\,正确应为C:\SQLBackup\,否则会被解析为当前盘符下的SQLBackup文件夹,而非C盘根目录 - 变量引用错误:原脚本中直接将
@datapath写在字符串内('' @datapath''),无法正确解析变量值,需要用''' + @datapath + '''的方式将变量值拼接到生成的语句中 - 单引号转义混乱:SQL中字符串内的单引号需要用两个单引号转义,原脚本在MOVE子句的对象名和目标路径部分,单引号的数量和位置错误,导致语法解析失败
- 多余的引号和空格:原SELECT语句末尾的
' ';属于多余的引号拼接,导致整体字符串语法不完整,触发Incorrect syntax near 'D'错误
执行修正后的脚本后,会生成正确的数据库恢复语句,可直接复制执行完成迁移。
内容的提问来源于stack exchange,提问作者BEE
相关产品推荐
相关产品推荐

