-1
我在尝试在代理作业步骤中使用sp_msforeachdb未记录的过程时遇到问题。这里是我的脚本来创建作业步骤: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()并执行它时,一切看起来都正确。
当您尝试直接在SSMS执行'Exec sp_msforeachdb'语句会发生什么? –
删除了不再需要的额外撇号集(来自@command参数字符串内部)之后,SQL Server将输出与上面相同的错误,每个数据库都会输出一次。 –
我想也许所有那些你有4个单引号的地方也许你只需要2.现在你知道这个错误不是因为工作,你可以在SSMS中使用它,直到它执行,然后相同的字符串应该在工作中工作得很好。 –