Я пытаюсь использовать токены в своих заданиях агента 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.