所以我有一些我继承的过程,我正在努力清理。我在其中反复看到的一件事情如下:
Update Table_A
Set A.ColX = B.Colx
From Table_A A
Join Table_B B on B.col1 =A.col1
and B.col2 = A.col2
Update Table_A
Set A.ColX = B.Colx
From Table_A A
Join Table_B B on a.col1 =b.col1
and B.col2 is null
现在,我尝试将这些组合起来,使用以下不同的最终行(不是同时进行)来进行单个查询!:
1) and (B.col2 = A.col2 or B.col2 is null)
2) and (isnull(B.col2,'') = COALESCE(a.col2, ''))
然而,似乎总是会做其中一个更新,而不是两者。我觉得我错过了一些相当明显的东西,有没有一种很好的方法来结合这两个查询?
感谢
答案 0 :(得分:2)
此查询应该有效:
Update Table_A
Set A.ColX = B.Colx
From Table_A A
Join Table_B B on B.col1 = A.col1
and (B.col2 = A.col2 OR or B.col2 is null)
你说你试过了 - 但你可以先尝试SELECT
看看结果是什么。这可能会说明为什么你没有得到你期望的结果。
答案 1 :(得分:1)
我希望以下查询在SQL Server中起作用:
Update A
Set ColX = B.Colx
From Table_A A Join
Table_B B
on a.col1 = b.col1 and
(B.col2 = A.col2 or B.col2 is null);
注意:
from
之后使用update
子句中定义的别名。我的理解是,如果您使用表名并且表中没有别名的from
子句,则所有行都将更新。虽然我非常确定SQL Server不支持集合中的表别名,但我似乎错误地认为是this simple SQL Fiddle shows。也许这在某些古老版本的SQL Server中是不允许的,而且这个限制只是困在我身上。