我有两张table
结核菌素1
ID Name Birthdate
--------------------
1 Ball NULL
2 Tire 2022-01-01
3 Ball 1900-01-01
结核菌素2
ID Name Birthdate
------------------------
NULL Ball NULL
NULL Tire 2022-01-01
NULL Ball 1900-01-01
我想更新Tb2.ID
以遵循Tb1.ID
,因此下面是我的脚本
UPDATE Tb2.ID = Tb1.ID
FROM Tb2
LEFT JOIN Tb1 ON Tb2.Name = Tb1.Name
AND ISNULL (Tb2.Birthdate, '') = ISNULL (Tb1.Birthdate, '')
WHERE Tb2.ID IS NULL
结果是ID 1在Tb 2中有2行,如下表所示
| 识别号|姓名|出生日期|
| - ------|- ------|- ------|
| 1个|球|零|
| 第二章|轮胎|2022年1月1日|
| 1个|球|一九○ ○年一月一日|
我期望将此记录的ID 3更新为Tb 2
ID Name Birthdate
----------------------
3 Ball 1900-01-01
你们能帮忙吗?
我怀疑脚本中Birthdate
的连接条件出错。
先谢了
2条答案
按热度按时间5vf7fwbs1#
试试看:
我认为空字符串在ISNULL中转换为1900-01-01,使用无效(但不是1900-01-01)日期作为NULL出生日期可以解决这个问题。
kcugc4gi2#
如果您使用的是SQL Server 2022(或更高版本),则还可以使用新的
IS [NOT] DISTINCT FROM
语法。这允许比较空值和非空值。注意,不需要使用左连接,因为您实际上只想在有匹配时更新,请使用内连接。
另请参见this db<>fiddle,了解
DISTINCT FROM
的快速演示。