2010-09-21 39 views
1

我目前遇到问题。我需要更新基于这种情况,从表B表A:从另一张表中更新表与案例陈述

  • 如果表A中的记录为空(前名),然后从表B更新记录

这里是我的错误驱动我从头脑中想到的剧本。这是我想要发生的事情。

UPDATE TableA 
    SET 
     NAME = 
     (
     CASE WHEN TableA.NAME IS NULL THEN 
      SELECT TableB.NAME 
      FROM TableB 
      WHERE TableB._ID = 1 
    ), 
     ADDRESS = 
     (
     CASE WHEN TableA.ADDRESS IS NULL THEN 
      SELECT TableB.ADDRESS 
      FROM TableB 
      WHERE TableB._ID = 1 
    ) 
    WHERE TableA._ID = 1 

就是这样的。有任何想法吗?

回答

2

你可以加入表一起,并使用IsNull回落到表B,当表A是null

update a 
set  name = IsNull(a.name, b.name) 
,  address = IsNull(a.address, b.address) 
from TableA as a 
inner join 
     TableB as b 
on  a._ID = b._ID 
+0

这将工作,如果我添加WHERE a._ID = 1? – Musikero31 2010-09-21 09:35:20

+0

@ Musikero31:是的,那么它只会更新第1行。 – Andomar 2010-09-21 10:47:58

+0

我在这里遇到了一个错误。多部分标识符“a.name”不能被绑定。 – Musikero31 2010-09-22 08:16:34

0

试试这个 -

update a 
SET a.name = (CASE WHEN a.name IS NULL THEN b.name ELSE a.name END), 
    a.address = (CASE WHEN a.address IS NULL THEN b.address ELSE a.address END) 
FROM tableA as a, tableB as b 
where a.ID = b.ID 
1

您可能会发现它更容易使用两个语句...

UPDATE TableA 
    SET NAME = (SELECT NAME 
        FROM TableB 
        WHERE TableA.ID = TableB.ID) 
    WHERE NAME IS NULL; 

UPDATE TableA 
    SET ADDRESS = (SELECT ADDRESS 
         FROM TableB 
         WHERE TableA.ID = TableB.ID) 
    WHERE ADDRESS IS NULL;