У меня возникла проблема при попытке использовать недокументированную процедуру sp_msforeachdb на этапе задания агента. Вот мой сценарий, чтобы создать шаг задания:Проблема с символом Escape внутри этапа задания агента SQL
EXEC sp_add_jobstep
@job_name = N'Weekly Blob Backup',
@step_name = N'Run Backup',
@subsystem = N'TSQL',
@command = N'EXEC sp_msforeachdb '' BACKUP DATABASE [?] TO URL = ''''http://urlgoeshere.blob.core.windows.net/subfolder/SIMSPROCESSOR1_'''' + ''''?'''' + ''''_'''' + CONVERT(VARCHAR(8), CAST(GETDATE() AS DATE), 112) + ''''.bak'''' WITH COMPRESSION, CREDENTIAL = ''''SQLBlobStorageCredential''''''',
@retry_attempts = 0,
@retry_interval = 0
При выполнении я получаю следующее:
Неправильный синтаксис около «+». [SQLSTATE 42000] (Ошибка 102) Неверный синтаксис рядом с ключевым словом 'with'. Если этот оператор представляет собой общую таблицу выражение, предложение xmlnamespaces или контекст отслеживания изменений , предыдущий оператор должен быть прерван точкой с запятой.
Успешное повторное создание этого файла для резервного копирования одной базы данных. Ясно, что что-то не так с экранированием символов, но когда я помещаю выражение Exec sp_msforeachdb в PRINT() и выполняю его, все выглядит правильно.
Что происходит, когда вы пытаетесь ВЫПОЛНИТЬ инструкцию Exec sp_msforeachdb непосредственно в SSMS? –
После удаления дополнительных наборов апострофов, которые больше не требуются (изнутри строки параметров @command), SQL Server выводит те же ошибки, что и выше, один раз для каждой базы данных. –
Я думаю, что, возможно, все те места, где у вас есть 4 одинарных кавычки, возможно, вам нужно только 2. Теперь, когда вы знаете, что ошибка не из-за задания, вы можете играть с ней в SSMS до тех пор, пока она не исполнится, а затем одна и та же строка должна работайте отлично в работе. –