Назад | Перейти на главную страницу

Почему токены 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 \ MyDatabaseName.bak

Фактический результат - создание резервной копии без имени, например:

D: \ Backup.bak

Если вокруг имени используются квадратные скобки, результатом будет ошибка, по сути, говорящая, что имя не может быть пустым. Таким образом, значение токена рассматривается как пустая строка.

Если я изменю токен на этом шаге на (ДАТА), он будет работать должным образом, и будет создана резервная копия с именем, являющимся текущей датой.

D: \ Backup \ 20160821.bak

Установлен флажок Заменить токены для всех ответов заданий на предупреждения.

Я потратил несколько часов на поиск объяснения этого конкретного поведения, но не нашел ничего подходящего.

ОС - Server 2008R2. Версия SQL Server - 11.0.3128.0

Я знаю поздний ответ, но токены с префиксом A- будут расширяться только в том случае, если шаг задания активирован предупреждением SQL Server или событием WMI.