为了进行查找,请执行以下操作:
- 派生列为四字节整数
DT_I4
输入,可以是0
或1
, - 查找表列中的四个字节的整数
0
或者1
同样如此。
来源栏:
(DT_I4)(Check1 == "Check1_value")
查找列:
看:
select * from
values(0,'output_for_0')
,(1,'output_for_1')
t (lkp_value, lkp_output)
通过查找或输出其他列,它可能看起来像:
如果我不将0
和转换1
为所选的数据类型,它将变成整数。我选择整数是因为我想省去将每个整数转换为位数据类型的工作,因为您必须对整个查找表查询中的每个值执行此操作。如果您只有两行,您可能会说写起来没关系:
select * from
values(cast(0 as bit),cast('output_for_0' as varchar(100)))
,(cast(1 as bit),cast('output_for_1' as varchar(100)))
t (lkp_value, lkp_output)
但我喜欢将其保存为纯整数,以免对每个值进行繁琐的转换。我对其他列也做了同样的事情,我没有设置文本列的 varchar 长度等等,这样我的 varchar 就出现varchar(45)
在查找表中,但出现varchar(100)
在输入表和目标表中。您可以用另一种方式来做。
尽管两者属于相同的数据类型,但只有0
to0
查找有效,而1
to查找无效。1
(DT_I4)(Check1 == "Check1_value"
如果满足条件,则查找值都1
变为DT_I4
整数1
,我将派生列的数字传递给目标表以仔细检查这一点。
我需要做什么才能在转换为整数的派生列中查找来自布尔条件的整数?
在检查这一点时,我尝试了
2
而不是1
,而且因为我需要“if-when-else”,所以我写道:并将其映射到查找表,我也将列从 更改为
1
。2
并且成功了。然后我将其更改2
为1
:并且它也有效。
DT_I4
因此,如果您不这样做,即使两边的数据类型输出相同,您也必须使用“if-when-else”进行编码。我不知道为什么会发生这种情况。您会发现有关 SSIS 查找的其他奇怪之处,例如:
附言
这没有帮助:
或者: