2010-09-21 41 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;