@[System::PackageName]
обычно совпадает с именем файла без расширения файла, поэтому, учитывая пакет с именем This-Is-Fun.dtsx
, мы ожидаем увидеть свойство PackageName как This-Is-Fun
.
Но есть случаи где это не так. Если мы назвали наш пакет A=B.C_D.dtsx
, результирующее имя объекта для нашего пакета будет A B C_D
. Каждый оскорбительный символ заменяется пробелами.
Если вы попытаетесь назвать объект SSIS «чем-то странным», это приведет к ошибке операции, например
Имя не может содержать никаких из следующих символов: / \: []. =
Ограничения аналогичны, но различаются для самого имени пакета, поскольку Windows / Visual Studio не допустит, чтобы
содержал любой из следующих символов: /? : & \ * "<> | #%
содержать управляющие символы Unicode содержат недопустимые суррогатные символы
символы являются зарезервированными системой именами, включая 'CON', 'AUX', 'PRN', 'COM1 '
или' LPT2 'быть'. ' или '..'
Как всегда с выражениями в SSIS, проверьте, что вы создаете. Создайте переменную SSIS, в которой вы указываете выражение.
Предполагая, что вы создаете переменную SSIS называется SMS_CONTENT
тип данных строки, а затем я собираюсь заменить пробелы символами подчеркивания. Выражение:
REPLACE(@[System::PackageName], " ", "_")
Учитывая имя начального пакета
- a = b .SO_61618859_This_Is_Fun.dtsx
- System :: PackageName становится
a b SO_61618859_This_Is_Fun
- SMS_CONTENT становится
a_b_SO_61618859_This_Is_Fun
Если он работает нормально во время разработки, но не работает в производстве, зарегистрируйте значение через информационное событие задачи сценария, чтобы вы могли просматривать журналы после запуска. https://billfellows.blogspot.com/2016/04/biml-script-task-test-for-echo.html Вам не нужно Biml, просто отметьте переменную как часть коллекции переменных только для чтения и следующий сценарий будет записывать значения в журнал. В вашем случае я бы добавил System :: PackageName, а затем мою переменную SSIS, User :: SMS_CONTENT
bool fireAgain = false;
string message = "{0}::{1} : {2}";
foreach (var item in Dts.Variables)
{
Dts.Events.FireInformation(0, "SCR Echo Back", string.Format(message, item.Namespace, item.Name, item.Value), string.Empty, 0, ref fireAgain);
}