在代理作业步骤中尝试使用sp_msforeachdb无文档化过程时,我遇到了问题。下面是创建作业步骤的脚本:
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不正确的语法靠近关键字'with‘。如果此语句是公共表表达式、xmlnamespaces子句或更改跟踪上下文子句,则必须用分号终止前面的语句。
我成功地重写了这个文件来备份一个数据库。显然,字符转义有些不正确,但是当我将'Exec sp_msforeachdb‘语句放入PRINT()并执行它时,一切看起来都是正确的。
发布于 2016-08-18 17:07:45
原来备份数据库不喜欢在TO URL子句中连接字符串。这样做是有效的:
EXEC sp_add_jobstep
@job_name = N'Weekly Blob Backup',
@step_name = N'Run Backup',
@subsystem = N'TSQL',
@command = N'EXEC sp_msforeachdb ''DECLARE @url NVARCHAR(500) = N''''http://urlgoeshere.blob.core.windows.net/simsstorage/'''' + SUBSTRING(@@SERVERNAME, CHARINDEX(''''\'''', @@SERVERNAME, 1) +1, 100) + ''''_'''' + N''''?'''' + N''''_'''' + CONVERT(NVARCHAR(8), CAST(GETDATE() AS DATE), 112) + N''''.bak'''' BACKUP DATABASE [?] TO URL = @url WITH COMPRESSION, CREDENTIAL = ''''SQLBlobStorageCredential''''''',
@retry_attempts = 0,
@retry_interval = 0
https://stackoverflow.com/questions/39021287
复制相似问题