为什么我的插入没有过滤掉空值?

问题描述 投票:0回答:1

我正在尝试使用

INSERT
UPDATE
而不是使用 MERGE 来实现 SCD2。如果 id 不存在,我需要将源表中的新行插入到目标表中,同时确保列行
compositekey
不为空,而不会使插入崩溃。目前,当我运行选择查询时,我得到了这个结果:

输出:

身份证 哈希 复合键
1 演示 222
2 演示2 22220 212
3 演示3 22220
4 演示2 22220 434

预期输出:

身份证 哈希 复合键
2 演示2 22220 212
4 演示2 22220 434

查询:

Insert into target
SELECT s.ID, s.namn, s.hash, s.compositekey
FROM source s
WHERE NOT EXISTS
(select id, compositekey  from target  where id = s.id and compositekey is null and s.compositekey is null)

我期望查询能够根据源表中不为空的 id 和组合键过滤掉并只提供目标表中不存在的行。我怀疑我在“is null”部分查询错误。

sql t-sql etl data-warehouse
1个回答
0
投票

这取决于TARGET表的内容。 如果“compositekey is null”不为 True,那么 INSERT 将插入具有 NULL 值的 compositekey。

尝试这种方式(Where 应该与 TARGET 表上的 UNIQUE 列一起):

insert into target
SELECT s.ID, s.namn, s.hash, s.compositekey
FROM source s
where (s.ID, s.compositekey) NOT IN
(select id, compositekey  from target );
© www.soinside.com 2019 - 2024. All rights reserved.