我有一個SSIS包掛鉤到一個具有tinyint(1)
字段的值爲4
的MySQL數據庫中,我檢查數據庫中該值是否爲4
,因爲如果已經設置爲4
,它不應該根據傳入的平面文件進行更改,但似乎不起作用。SSIS平等運營商不按預期工作
它不應該更新狀態,因爲該字段設置爲4
,但我想我只是不明白爲什麼表達式不起作用。我已經嘗試了所有不同的int
類型的SSIS,並沒有關係,因爲它始終將狀態設置爲1
。基於快速谷歌搜索tinyint
應該是一個unsigned 1 byte int
這就是爲什麼我是鑄造DT_UI1
傳入值從平面文件中的第一個是產品,最後是狀態
"039414","*****","*****","*****","*****","*****","*****","*****"," "
現有值從數據庫中第一個是產品和第二個是狀態
039414 4
予處理由以下衍生的列表達式的狀態,基本上如果沒有值應該是1
否則應該4
LEN(TRIM(Status)) > 0 ? (DT_UI1)4 : (DT_UI1)1
下面是我使用設置product_status派生列表達式(products_status與所述數據庫中的實際字段,並從進入的平面文件prod_status狀態):
((DT_UI1)products_status == (DT_UI1)4) || ISNULL(prod_status) ? (DT_UI1)4 : (DT_UI1)prod_status
我期待的發生的一些產品應該保持4
的狀態,但正在更新到1
,有沒有人有一個想法,爲什麼?
編輯:
我試圖改變的表達,沒有成功以下。
(DT_UI1)products_status == (DT_UI1)4 || ISNULL(prod_status) ? (DT_UI1)4 : (DT_UI1)prod_status
和
((DT_UI1)products_status == (DT_UI1)4 || ISNULL(prod_status)) ? (DT_UI1)4 : (DT_UI1)prod_status
和公正的基礎測試
(DT_UI1)products_status == (DT_UI1)4 ? (DT_UI1)4 : (DT_UI1)prod_status
解決方案:
我結束了鑄造查詢字段爲整數,因爲它是被拉入作爲boolean
ins的int
CAST(products_status AS SIGNED)
TEAD然後改變了我的表情下面,它的工作如預期
(products_status == 4 || ISNULL(prod_status)) ? (DT_I4)4 : prod_status
我試着去掉了所有除了鑄造括號但沒有用,我試着去除了除了鑄造括號之外的所有東西,還有一個額外的設置圍繞整個語句,並且無濟於事。 – Charles380
我跟着一些鏈接,並同意:tinyint應該是DT_UI1。似乎在包變量下拉菜單中被稱爲「Byte」。我不確定它爲什麼不匹配(DT_UI1)4。 (您可以省略來自products_status的強制轉換?)我會在派生列步驟輸出的輸出上放置一個Data Viewer,並查看它認爲所有列值是什麼。 – criticalfix
這裏有一個[DataViewer的鏈接](http://msdn.microsoft.com/en-us/library/ms140318.aspx) – criticalfix