查询否定AND和NOT EXIST进行SSIS查找

时间:2015-12-22 02:08:49

标签: sql ssis

我一直在拼凑SQL查询以检查表是否存在使用2次比较和" NOT EXIST"的记录。 SQL位于'自定义查询'查找转换(在“高级”选项卡下)。 然后"查找匹配输出"转到数据库和"查找无匹配输出"转到一个平面文件。

SELECT *
FROM [dbo].[MyTable] 
 WHERE NOT EXISTS (SELECT 1
    FROM [dbo].[MyTable] 
      WHERE [dbo].[MyTable].[DateStamp] = ?
      AND [dbo].[MyTable].[SomeID] = ?
)

但是" NOT"不会改变结果。所有记录都转到"查找无匹配输出"。我原本希望在删除NOT时看到输出更改到另一个分支。这个查询有什么问题?

它可能很简单,但让我疯了。请帮忙。

其他信息: 该表最初是空的。查询的目的是填充表。此查询的检查是为了防止重复输入。与("?")进行比较的值始终为非空。

2 个答案:

答案 0 :(得分:0)

如果比较包含NULL值,则会描述您所描述的行为。一种可能性是?代表NULL值。然后条件总是返回NULL。而且,NOT NULLNULL一样不真实。

另一种可能性是?的合法输入没有匹配的行。并且,一列或两列有时是NULL。这会导致同样的问题。

您可以通过将where DateStamp is not null and SomeId is not null添加到子查询来解决第二个问题。

答案 1 :(得分:0)

答案由Srinivasa Rao Gude在另一个论坛提供。 他说:

  

查找转换将始终在输入之间进行均衡   和查找参考数据集。因为我们最初没有行   [我的表]内连接失败,因此重定向到查找号   匹配输出方向。 ...将您的查询更新为EXISTS而不是   NOT EXISTS ...将查找无匹配输出子句更新为DB和   匹配的子句到平面文件。

这很有用。谢谢Srinivasa!