2008-10-08 3 views
4

У меня есть пакет dtsx с ограничением приоритета, который оценивает выражение и ограничение. Ограничение - это «успех», а выражение «@myVariable» == 3. myVariable - это int32, и когда он установлен в графическом интерфейсе Visual Studio, пакет выполняется отлично. Есть два других пути, которые проверяют значение 1 или 2.Как исправить ошибку оценки ограничения приоритета DTSX при передаче переменной в командной строке?

Однако, когда я пытаюсь запустить пакет из командной строки и передать значение для моей переменной, он ошибочно утверждает, что выражение не оценивает до логического!

Команда:

dtexec /F "c:myPackage.dtsx" /SET 
\Package.Variables[User::myVariable].Properties[Value];3 

Ошибка:

The expression "@myVariable == 1" must evaluate to True or False. 
Change the expression to evaluate to a Boolean value. 

Тот факт, это прекрасно работает с графическим интерфейсом и что Microsofts документация утверждает, == (intuiatively) возвращает логическое значение имеет меня очень смущенный. Я также попытался окружить 3 в двойных кавычках в моей команде без везения, и теперь у меня нет идей.

У кого-нибудь есть идеи, что происходит?

ответ

3

Извините, меня так долго, чтобы вернуться в эту тему! Но (DT_I4)@[User::myVariable] == 3 сделал трюк. Благодаря!

1

Не уверен, если это вызывает проблемы, но вы используете несколько нечетный синтаксис, чтобы установить значение переменной, попробуйте

dtexec ... /SET \Package.Variables[User::myVariable].Value;3 

Примечание Я использую .Value, вместо .Properties[Value]. .Value - официальный способ, рекомендованный в электронной документации. Возможно, также работает синтаксис .Properties[Value], но изменяет тип переменной.

0

Это, кажется, ошибка в начальном выпуске dtexec.exe. У меня есть версия 9.00.3042.00, похожая на SQL Server 2005 с пакетом обновления 2 (SP2), установленная в моем en enviro. У нас есть вторая тестовая машина, которая находится на версии 9.00.1399.06. Единственное место, где я вижу этот отказ, - это тестовый ящик. Мой дев. коробка заканчивается. Я добавил явное преобразование типа (DT_BOOL) в свою логическую переменную, которая была частью моих выражений, и ошибка исчезла.

Кроме того, комментарий .Value указан неверно. Предполагается, что это .Properties [Value], потому что значение переменной является просто элементом в коллекции свойств глобальных переменных. Это не синтаксис C# или VB.net. Это синтаксис SSIS.

0

Кажется, что ошибка в ssis, потому что значение, которое вы передаете через командную строку, автоматически не добавляется к типу переменных конфигурации. Кажется, что SSIS обрабатывает значения, переданные через строку cmd как строки, что вызывает проблемы во время выполнения. Либо измените переменную на строку и сравните ее, либо используйте (DT_I4) для выражения в выражении.

2

Это определенно ошибка в dtexec. У меня была аналогичная проблема (установка целочисленного значения с помощью команды/set в командной строке dtexec), которая жаловалась далее на выполнение пакета ((выходная) переменная была неправильного типа, когда возвращается из хранимой процедуры.

Опуская набор этого значения (в любом случае установил его на ноль), исправлена ​​ошибка выполнения пакета. Не уверен, что бы вы сделали, если вам действительно нужна была такая ценность - они, похоже, отлично работают в качестве входных параметров, просто привинчиваются, когда вы хотите использовать их в качестве выходных параметров, и они не являются строками.