即使查询中没有行,Oledb命令也会执行

时间:2019-08-19 20:00:38

标签: sql-server ssis oledb etl lookup

我有一个SSIS包,如果没有匹配项,则可以从中查找,以将这些记录作为标志Y插入,但是如果以前存在,则必须将存在的那些记录更新为标志为N.检查是基于代码完成的。如下

enter image description here

我已经按照以下步骤构建了SSIS软件包:

enter image description here

OLE DB命令用于根据来自不匹配查找的代码将标志更新为N(对于现有记录)为N(对于现有记录)。 OLE DB目标用于插入来自查找不匹配且标志为Y的匹配项的新记录。我想正确地编写OLE DB命令,以便仅将那些已经为Y并且它们来自的记录标志更新为N查找无匹配输出。但是如何正确地形成查询却遇到了问题。我写了这个

UPDATE [LKP].[l_channel_hierarchy]
SET record_end_date = CONVERT(VARCHAR,DATEADD(SECOND,-1,GETDATE()),120) 
,current_record_flag   = 'N'            
WHERE current_record_flag = 'Y' AND [CHANNEL_CODE] = ?

我构建的上述查询实现了相同的功能,其中将把没有查找到的行作为参数将标志更新为N。

enter image description here

1 个答案:

答案 0 :(得分:0)

如果您尝试“如果没有匹配项,则需要将这些记录作为标记Y插入,但是如果以前存在,那么我必须将这些记录更新为标记为N”,那么查找无匹配输出仅具有丢失的记录,并且观察到的行为(未匹配的记录被馈入 OLE DB命令)是有效的。
要将现有记录的current_record_flag设置为N,请从名为 Lookup Match Output 的Lookup转换中获取另一个数据流,然后在其中放置 OLE DB Command