2016-03-02 53 views
-1

我寫了下面的代碼正在運行,但沒有更新。更新使用CASE語句不起作用

UPDATE FINDOC 
SET CCCPAPCUSCODE= 
(
CASE 
WHEN TRDBRANCH IS NULL THEN (SELECT TOP 1 CCCCODE1 FROM TRDBRANCH B WHERE  B.TRDBRANCH=TRDBRANCH) 
ELSE (SELECT TOP 1 CODE1 FROM TRDR T WHERE T.TRDR=TRDR) END 
) 
WHERE TRNDATE='20160226' AND 
SERIES IN (1001,1021,1502,1522,1009) 

任何人都可以提出原因嗎?

+4

因此,沒有任何符合WHERE條款。 –

+2

如果你在SELECT * FROM FINDOC WHERE TRNDATE ='20160226'和IN(1001,1021,1502,1522,1009)系列中做了什麼? –

+0

不,有匹配 – user2242558

回答

1

嘗試使用類似的東西:

UPDATE FD 
SET FD.CCCPAPCUSCODE = CASE 
         WHEN FD.TRDBRANCH IS NULL THEN (SELECT TOP 1 CCCCODE1 FROM TRDBRANCH B WHERE B.TRDBRANCH=FD.TRDBRANCH) 
         ELSE (SELECT TOP 1 CODE1 FROM TRDR T WHERE T.TRDR=FD.TRDR) 
         END  
FROM FINDOC FD 
WHERE FD.TRNDATE='20160226' 
AND FD.SERIES IN (1001,1021,1502,1522,1009) 
+0

我試過了,不工作! – user2242558

0

你的邏輯似乎是南轅北轍。使用@ Megartron的代碼版本,當FD.TRDBRANCHNULL時,子查詢將不會返回任何記錄,因此您的更新不會執行任何操作。你的意思是檢查NOT NULL而不是?在這種情況下,正確的代碼將是:

UPDATE FD 
SET FD.CCCPAPCUSCODE = CASE WHEN FD.TRDBRANCH IS NOT NULL 
          THEN (SELECT TOP 1 
             CCCCODE1 
           FROM  TRDBRANCH B 
           WHERE  B.TRDBRANCH = FD.TRDBRANCH 
          ) 
          ELSE (SELECT TOP 1 
             CODE1 
           FROM  TRDR T 
           WHERE  T.TRDR = FD.TRDR 
          ) 
         END 
FROM  FINDOC FD 
WHERE FD.TRNDATE = '20160226' 
     AND FD.SERIES IN (1001, 1021, 1502, 1522, 1009)