语法错误帮助

unr*_*eal 1 sql-server syntax

我有这个脚本可以正常工作,但是当我更改目录路径时,它似乎收到此语法错误“字符串后未关闭的引号”会导致这种情况的问题。

DECLARE @db VARCHAR(50), 
@sql NVARCHAR(400),
@country varchar(100)
DECLARE barcardi cursor for 
select [ProjectDB] from [DBA].[dbo].[BacardiExport] order by [Country] asc
open barcardi 
fetch next from barcardi into @db
while @@FETCH_STATUS = 0
    begin
        set @country = (select country from [DBA].[dbo].[BacardiExport] where [ProjectDB] = @db)
        set @sql = 'BACKUP DATABASE ['+@db+'] TO  DISK = N''D:\ConfirmitN02BackupNew\BacardiProjectBackup\Bacardi_'+@country+'_'+@db+'.bak'' WITH NOFORMAT, NOINIT, SKIP, NOREWIND, NOUNLOAD,  STATS = 10'
        exec sp_executesql @sql
        --print @sql

        set @country = (select country from [DBA].[dbo].[BacardiExport] where [ProjectDB] = @db)
        set @sql = 'RESTORE DATABASE [Bacardi_'+@country+'_'+@db+'] FROM  DISK = N''D:\ConfirmitN02BackupNew\BacardiProjectBackup\Bacardi_'+@country+'_'+@db+'.bak'' WITH  FILE = 1,  MOVE N'''+@db+'_dat'' TO N''D:\ConfirmitN02-MDF\confirmit_sql_data\Bacardi_'+@country+'_'+@db+'.mdf'',  MOVE N'''+@db+'_log'' TO N''D:\ConfirmitN02-LDF\confirmit_sql_log\Bacardi_'+@country+'_'+@db+'.ldf'',  NOUNLOAD,  REPLACE,  STATS = 5'
        exec sp_executesql @sql
        --print @sql

        set @country = (select country from [DBA].[dbo].[BacardiExport] where [ProjectDB] = @db)
        set @sql = 'UPDATE [DBA].[dbo].[BacardiExport] set [CopyProjectDB] =  ''Bacardi_'+@country+'_'+@db+''' where [ProjectDB] = '''+ @db +''''
        exec sp_executesql @sql
        --print @sql

        update [DBA].[dbo].[BacardiExport] set [Copied] = 1 where [ProjectDB] = @db
        update [DBA].[dbo].[BacardiExport] set [ProcessDate] = getdate() where [ProjectDB] = @db

    fetch next from barcardi into @db
    end
close barcardi
deallocate barcardi
Run Code Online (Sandbox Code Playgroud)

这是输出的一部分。

SSIS 包“D:\ConfirmitN02BackupNew\Bacardi\DataExport2\DataExport2\Package.dtsx”开始。错误:0xC002F210 at Copy Bacardi Databses, Execute SQL Task: Executing the query "DECLARE @db VARCHAR(50), @sql NVARCHAR(400), @c..." 失败并出现以下错误:“字符后未闭合引号字符串 'D:\ConfirmitN02-LDF\confirmit_sql_log\Bacardi_Belgium_survey_p1622247398.ld'。'D:\ConfirmitN02-LDF\confirmit_sql_log\Bacardi_Belgium_survey_p1622247398.ld' 附近的语法不正确,字符串'Unique_Belgium_survey_p1622247398.ld'后的语法不正确。 \Bacardi_Germany_survey_p1622259397.ld'。'D:\ConfirmitN02-LDF\confirmit_sql_log\Bacardi_Germany_survey_p1622259397.ld' 附近的语法不正确。'NOUN' 不是公认的 RESTORE 选项。',' 附近的语法不正确。11% 已处理。20% 已处理。30% 已处理。40% 已处理。50% 已处理。60% 已处理。70% 已处理。80% 已处理。90% 已处理。为数据库“survey_p1622247398”处理了 11584 页,文件 1 上的文件“survey_p1622247398_dat”已处理 100%。已处理数据库“survey_p1622247398”的 5 页,文件 1 上的文件“survey_p1622247398_log”。BACKUP DATABASE 在 1.909 秒(47.425 MB/秒)内成功处理了 11589 页。备份数据库 [survey_p1622247398] TO DISK = N'D:\ConfirmitN02BackupNew\BacardiProjectBackup\Bacardi_Belgium_survey_p1622247398.bak' WITH NOFORMAT, NOINIT, SKIP, NOREWIND, NOUNLOAD

Aar*_*and 6

很高兴您解决了截断问题,但我可以提供一个不会出现这种情况的替代方案,消除对光标脚手架等的需求吗?

DECLARE @src nvarchar(max) = N'', @sql nvarchar(max) = N'';

SELECT @src = N'
  BACKUP DATABASE $qdb$ TO  DISK 
  = N''D:\ConfirmitN02BackupNew\BacardiProjectBackup\Bacardi_$c$_$db$.bak''
   WITH NOFORMAT, NOINIT, SKIP, NOREWIND, NOUNLOAD,  STATS = 10;

  RESTORE DATABASE [Bacardi_$c$_$db$] FROM DISK 
  = N''D:\ConfirmitN02BackupNew\BacardiProjectBackup\Bacardi_$c$_$db$.bak'' 
   WITH  FILE = 1,  MOVE N''$db$_dat'' 
   TO N''D:\ConfirmitN02-MDF\confirmit_sql_data\Bacardi_$c$_$db$.mdf'',
   MOVE N''$db$_log'' TO N''D:\ConfirmitN02-LDF\confirmit_sql_log\Bacardi_$c$_$db$.ldf'',
   NOUNLOAD,  REPLACE,  STATS = 5;

  UPDATE [DBA].[dbo].[BacardiExport] set [CopyProjectDB] = ''Bacardi_$c$_$db$'',
    Copied = 1, ProcessDate = GETDATE() where [ProjectDB] = ''$db$'';';

SELECT @sql += REPLACE(REPLACE(REPLACE(@src,   
  N'$c$',country),N'$db$',ProjectDB),N'$qdb$',QUOTENAME(ProjectDB))
FROM DBA.dbo.BacardiExport;

PRINT @sql; -- this may not display everything, depending on how many rows
-- EXEC sys.sp_executesql @sql;
Run Code Online (Sandbox Code Playgroud)