2012-05-03 36 views
5

Tôi đang cố gắng để cập nhật một bảng tạm thời từ một bảng mã nguồn:Làm cách nào để cập nhật nhiều cột với truy vấn con trong một câu lệnh?

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' 

Đáng tiếc là nó than phiền

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

Trả lời

4

Sau nhiều thử và sai tôi gộp một số giúp đỡ tại nơi làm việc và chúng tôi đã đưa ra với điều này:

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' 

nào Sybase dường như chấp nhận.

3

Bạn phải làm cho bản cập nhật như thế này:

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' 

Kiểm tra THIS ARTICLE để biết thêm thông tin!

+1

Tôi nhận được lỗi: Bạn không thể sử dụng bảng dẫn xuất trong mệnh đề FROM của câu lệnh UPDATE hoặc DELETE. Cú pháp không chính xác gần ')' –

Các vấn đề liên quan