2013-06-25 111 views
5

我有一個SSIS包,我編程和我的腳本組件不會允許空列輸入。我已經檢查了這個框以保留平面文件源組件中的空值。我的程序運行良好,直到我的腳本組件出現錯誤「列有空值」(超級模糊,我知道)。當前引發錯誤的列是「int」值列,用於我的腳本中的聚合。SSIS腳本組件,允許空值

我可以使空值爲0或說「NULL」,但我寧願留下空白。

我使用SQL Server BIDS 2008

+0

請張貼足夠的組件代碼,以便我們可以進行猜測。 –

+0

與論壇網站不同,我們不使用「謝謝」或「任何幫助表示讚賞」,或在[so]上簽名。請參閱「[應該'嗨','謝謝',標語和致敬從帖子中刪除?](http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be - 從帖子中刪除) –

回答

7

是因爲SSIS涉及的數據庫這麼多,不希望花費大量的時間DB NULL和C#NULL之間的區別,他們爲每一個布爾屬性使用命名約定(columnname)_IsNull在Buffer中輸入列。你可以閱讀關於MSDN的更多信息。

因此,您必須使用這些緩衝區列來確定值是否爲空,然後執行您嘗試使用組件中該列的任何操作。

因此,像

if (!Row.MyColumn_IsNull) { 
//do something } 
else { 
//do something else, or nothing, etc. 
} 
+0

謝謝你,凱爾!這是我原本想做的事情,在錯誤發生之前似乎無法捕捉輸入,最後我使用了三元操作,作爲另一個答案在這裏。 – user2471943

2

雖然凱爾的回答很足,我使用的是工作就好了不同的方法。我用c#三元組。

價值 = 價值 _IsNull? True ValueFalse Value;

排。 rowname =行。 rowname _IsNull? 0:行。 rowname;

如果它們是null進入我的腳本,它將我的空整數列的值更改爲0。否則,它保留了價值。

+0

我會接受這個解決方案。我有同樣的問題。 – SamekaTV

+0

我會建議反對這個,除非你有一個特定的原因。0通常是一個非常不同的意思。 – Scotch

0

您的錯誤是否發生在C#代碼的某處?當你有一個數據類型爲int的數據庫列時,它有點瘋狂,它允許空值。在C#土地你必須使用int?因爲當你需要接受空值時,這個值就是int。否則,已經提到的方法是一個很好的方法。

+0

是的,這是也是我嘗試過的另一種選擇,謝謝! – user2471943