2012-05-03 9 views
5

Estoy intentando actualizar una tabla temporal a partir de una tabla de origen:¿Cómo actualizo varias columnas con una subconsulta en una sola declaración?

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' 

Por desgracia, se queja

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

Respuesta

4

Después de mucho ensayo y error me juntaron un poco de ayuda en el trabajo y se nos ocurrió esto:

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' 

Qué Sybase parece aceptar.

3

Tienes que hacer la actualización de la siguiente manera:

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' 

¡Compruebe THIS ARTICLE para obtener más información!

+1

Aparece el error: No se puede usar una tabla derivada en la cláusula FROM de una instrucción UPDATE o DELETE. Sintaxis incorrecta cerca de ')' –

Cuestiones relacionadas