我有一个连接到 MySQL 数据库的 SSIS 包,该数据库有一个tinyint(1)
设置为该值的字段,4
我正在检查该值是否4
在数据库中,因为它不应该根据传入的平面文件而更改,如果它是已经设置为4
,但它似乎没有工作。
它不应该更新状态,因为该字段设置为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
解决方案:
我最终将查询中的字段转换为整数,因为它被作为 aboolean
而不是int
CAST(products_status AS SIGNED)
然后将我的表达式更改为以下内容,它按预期工作
(products_status == 4 || ISNULL(prod_status)) ? (DT_I4)4 : prod_status