Это случайная деталь (оригинальная) реализация сокетов Berkeley. В основном, реализация использовала номер файловых дескрипторов в качестве переменной размера для некоторых временных внутренних битовых массивов. Поскольку дескрипторы Unix начинаются с нуля, наибольший дескриптор будет на один меньше, чем размер любого массива с семантикой с одним слотом на дескриптор. Следовательно, требование «наибольшее-плюс-одно». Эта настройка плюс-1 могла быть поглощена самим системным вызовом, но не была.
Древняя история, вот и все. В результате правильная интерпретация первого аргумента имеет меньшее отношение к значениям дескриптора , чем к числу из них (т. Е. Максимальное количество дескрипторов, подлежащих тестированию). См. Раздел 6.3 из Stevens et al (Это переработанная и обновленная версия классического текста Rich Stevens. Если у вас ее нет, получите ее!) [/ G6]
Проведя несколько экспериментов, я определил следующее:
Я думаю, что это ошибка, а не функция, но это не имеет значения, и да, в результате значение времени выполнения определенно ЗАПИСЫВАЕТСЯ к значению времени проектирования.
Свойство Disable переоценивается адекватно, поэтому, если его значение будет изменено во время выполнения, задача выполнит это. Я проверил это, используя контейнер цикла, который будет работать бесконечно, и одну задачу ExecuteSQL, которая включается только в первую секунду каждой минуты. Задача ExecuteSQL записывает текущее время и дату в простую таблицу. Таблица медленно заполнялась датами в течение первой секунды каждой минуты, когда выполнялось задание.
InitExpression: @WDindex = DATEPART("s", GETDATE())
EvalExpression: true
AssignExpression: @WDindex = DATEPART("s", GETDATE())
Для задачи ExecuteSQL:
INSERT Sandbox.dbo.Log
(CreatedDateTime,
Description)
VALUES
(GETDATE(),
'Task not disabled')
Существует опыт разработки и опыт выполнения. Во время разработки значение переменной @WDindex ... каким бы оно ни было. Я возьму 1 за этот ответ. У вас есть задачи, включенные / отключенные в зависимости от значения, которое отражено в конструкторе.
При запуске пакета значение @WDIndex изменяется на текущее значение / значение времени выполнения. Здесь я предполагаю, что это не 1, так что все правильно в вашем пакете. Когда выполнение пакета служб SSIS завершается, оно не сохраняет текущее состояние. Вместо этого это рабочее пространство сбрасывается до значений времени разработки по умолчанию в ожидании следующего запуска.
Выражения оцениваются каждый раз, когда к ним обращаются. Если бы у вас был какой-то метод переключения @WDIndex между задачами, вы бы это увидели. Более простой способ убедиться в этом - взглянуть на функцию GetDate (). Каждый раз, когда вы просите проверить его, значение будет меняться - если только вы явно не сохраните значение в переменной с помощью задачи сценария или задачи выражения (2012 +).