我有这个脚本可以正常工作,但是当我更改目录路径时,它似乎收到此语法错误“字符串后未关闭的引号”会导致这种情况的问题。
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
很高兴您解决了截断问题,但我可以提供一个不会出现这种情况的替代方案,消除对光标脚手架等的需求吗?
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)
归档时间: |
|
查看次数: |
132 次 |
最近记录: |