我有一个更新查询,当一个表中的值与另一个表中的字段不匹配时,它会更新一个表中的字段。
UPDATE table1
SET a.field1 = b.field3
FROM table1 a ,
table2 b
WHERE a.field2 = b.field2
AND a.field1 <> b.field3
我遇到的问题是它不能检测到当a.field1为空值且b.field3为一个值时,或者当a.field1为一个值且b.field3为空值时。
我通过添加以下内容来解决这个问题...
UPDATE table1
SET a.field1 = b.field3
FROM table1 a ,
table2 b
WHERE a.field2 = b.field2
AND ( a.field1 <> b.field3
OR (a.field1 IS NOT NULL
AND b.field3 IS NULL)
OR (a.field1 IS NULL
AND b.field3 IS NOT NULL)
)
我的问题更集中于为什么会发生这种情况以及如何最好地构建查询以防止这种情况发生?
<>
)。这就是为什么空值记录被省略的原因。因此,您必须明确使用IS NULL
或IS NOT NULL
。 - Tim SchmelterWHERE val=null ...
,而它在我们的 SQL Server 上实际上确实可以像WHERE val IS NULL
一样工作!原来我们的服务器上启用了一个名为SET ANSI_NULLS OFF
的设置。这个(已弃用的!!)设置允许空值比较,请参见此处。 - Carsten Massmann