为什么 SQL Server 2012 令牌在代理作业中使用时不会扩展?

为什么 SQL Server 2012 令牌在代理作业中使用时不会扩展?

我正在尝试在 SQL Server 代理作业中使用令牌如这里所述,但有些令牌并未按我预期发挥作用。

运行代理作业时,原本应该扩展以提供数据库名称、服务器名称等信息的令牌未扩展。令牌扩展的结果是一个空字符串,而不是所需的值。

下面是一个简单的例子来演示这个问题。

一个名为“备份”的简单作业有一个名为“创建备份”的 T-SQL 步骤,它使用数据库 MyDatabaseName

BACKUP 
DATABASE 
 MyDatabaseName
TO  
DISK = N'D:\Backup\"$(ESCAPE_NONE(A-DBN))".bak'

令牌 $(ESCAPE_NONE(A-DBN)) 应该扩展为当前数据库的名称,因此我希望这项作业生成一个与数据库同名的备份文件,如下所示:

D:\Backup\我的数据库名称.bak

实际结果是创建一个没有名称的备份,如下所示:

备份文件.bak

如果名称周围使用方括号,则结果将是一个错误,基本上表明名称不能为空。因此,令牌的值被视为空字符串。

如果我在此步骤中将令牌更改为(DATE),那么它将按预期工作,并且会创建一个以当前日期为名称的备份。

D:\Backup\20160821.bak

已选中“为所有作业响应警报替换令牌”框。

我花了几个小时寻找这种特定行为的解释,但没有找到任何相关内容。

操作系统是 Server 2008R2。SQL Server 版本是 11.0.3128.0

答案1

我知道回复晚了,但是以 A- 为前缀的标记只有在作业步骤由 SQL Server 警报或 WMI 事件激活时才会扩展。

相关内容