2012-05-03 60 views
5

我試圖更新源表臨時表:如何使用單個語句中的子查詢更新多個列?

UPDATE #DETAIL 
     SET EXCD_ID, CDOR_OR_AMT, CDOR_OR_VALUE 
     (SELECT 
      CDID_ADDL_DATA_1, CDID_ADDL_DATA, CDID_VALUE_STRING 
     FROM 
      CMC_CDID_DATA CDID 
     WHERE 
      CDID.CLCL_ID = DTL.CLCL_ID AND 
      CDID.CDML_SEQ_NO = DTL.CDML_SEQ_NO AND 
      CDID_TYPE = 'NDC' 
    ) 
    FROM #DETAIL DTL 
    WHERE DTL.CDOR_OR_ID = 'XS' 

不幸的是它抱怨

Incorrect syntax near ',' (on the '(SELECT' line) 
Incorrect syntax near 'FROM' (the second one) 

回答

4

多的試驗和錯誤之後,我在收集一些工作幫助我們想出了這個:

UPDATE #DETAIL 
     SET DTL.EXCD_ID = CDID.CDID_ADDL_DATA_1, 
      DTL.CDOR_OR_AMT = CONVERT(MONEY,CDID.CDID_ADDL_DATA), 
      DTL.CDOR_OR_VALUE = CDID.CDID_VALUE_STRING 
    FROM #DETAIL DTL 
    INNER JOIN 
      CMC_CDID_DATA CDID ON 
      CDID.CLCL_ID = DTL.CLCL_ID AND 
      CDID.CDML_SEQ_NO = DTL.CDML_SEQ_NO 
    WHERE DTL.CDOR_OR_ID = 'XS' 
      AND CDID.CDID_TYPE = 'NDC' 

哪個SYBASE似乎接受。

3

你必須作出這樣的更新:

UPDATE #DETAIL 
SET DTL.EXCD_ID = CDID.CDID_ADDL_DATA_1, 
    DTL.CDOR_OR_AMT = CDID.CDID_ADDL_DATA 
    DTL.CDOR_OR_VALUE = CDID.CDID_VALUE_STRING 
FROM #DETAIL DTL 
INNER JOIN (SELECT 
      CDID_ADDL_DATA_1, CDID_ADDL_DATA, CDID_VALUE_STRING 
     FROM 
      CMC_CDID_DATA) CDID ON CDID.CLCL_ID = DTL.CLCL_ID AND 
      CDID.CDML_SEQ_NO = DTL.CDML_SEQ_NO AND 
      CDID_TYPE = 'NDC' 
WHERE DTL.CDOR_OR_ID = 'XS' 

查詢THIS ARTICLE瞭解更多信息!

+1

我收到錯誤:您不能在UPDATE或DELETE語句的FROM子句中使用派生表。 '''附近的語法不正確 –

相關問題