我一直在拼凑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时看到输出更改到另一个分支。这个查询有什么问题?
它可能很简单,但让我疯了。请帮忙。
其他信息: 该表最初是空的。查询的目的是填充表。此查询的检查是为了防止重复输入。与("?")进行比较的值始终为非空。
答案 0 :(得分:0)
如果比较包含NULL
值,则会描述您所描述的行为。一种可能性是?
代表NULL
值。然后条件总是返回NULL
。而且,NOT NULL
与NULL
一样不真实。
另一种可能性是?
的合法输入没有匹配的行。并且,一列或两列有时是NULL
。这会导致同样的问题。
您可以通过将where DateStamp is not null and SomeId is not null
添加到子查询来解决第二个问题。
答案 1 :(得分:0)
答案由Srinivasa Rao Gude在另一个论坛提供。 他说:
查找转换将始终在输入之间进行均衡 和查找参考数据集。因为我们最初没有行 [我的表]内连接失败,因此重定向到查找号 匹配输出方向。 ...将您的查询更新为EXISTS而不是 NOT EXISTS ...将查找无匹配输出子句更新为DB和 匹配的子句到平面文件。
这很有用。谢谢Srinivasa!