2008-10-08 30 views
4

我有一個優先級約束條件的dtsx包,用於評估表達式和約束條件。約束是「成功」,表達式是「@myVariable」== 3. myVariable是一個int32,在Visual Studio的設計GUI中設置時,程序包執行得很好。還有兩個其他路徑檢查值爲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. 

這種運行從GUI和微軟的文檔聲稱= =(intuiatively)罰款的事實返回一個布爾有我非常困惑。我也嘗試用我的命令在雙引號中圍繞3,但現在我沒有想法。

任何人都知道發生了什麼?

回答

3

對不起,我花了這麼久回到這個線程!但(DT_I4)@[User::myVariable] == 3做到了。謝謝!

1

不知道它是否會引起問題,但使用的是略顯奇怪的語法來設置變量值,嘗試

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

注,而不是.Properties[Value]我使用.Value.Value是Books Online推薦的官方方式。也許.Properties[Value]語法也適用,但會更改變量類型。

0

這似乎是dtexec.exe的初始版本中的一個錯誤。我的版本9.00.3042.00就像SQL Server 2005 SP2,安裝在我的開發環境中。我們有第二臺測試機器,版本爲9.00.1399.06。我看到這個失敗的唯一地方是在測試盒上。我的開發。盒子運行完成。我添加了一個顯式類型轉換(DT_BOOL)給我的布爾變量,這是我的表達式的一部分,錯誤消失了。

此外,上面的.Value註釋不正確。它應該是.Properties [Value],因爲變量的值只是全局變量屬性集合中的一個項目。這不是C#或VB.net語法。這是SSIS語法。

0

看起來像ssis中的錯誤,因爲您通過命令行傳入的值不會自動轉換爲配置變量的類型。 SSIS似乎將通過cmd行傳入的值視爲字符串,這在運行時會導致問題。將變量更改爲字符串並對其進行比較,或者使用(DT_I4)在表達式中進行轉換。

2

這絕對是一個在dtexec中的錯誤 - 我有一個類似的問題(通過dtexec命令行上的/ set命令設置一個整數值),在程序包執行中進一步抱怨(輸出)變量的類型錯誤從存儲過程返回。

省略該值的設置(無論如何設置爲零)修正了程序包執行錯誤。不確定如果你真的需要這個值,你會怎麼做 - 它們看起來可以很好地作爲輸入參數,當你想用它們作爲輸出參數時,它們就會出現問題,而且它們不是字符串。