none
CONSULTA SOBRE MERGE RRS feed

  • Pregunta

  • AL realizar el siguiente código :

    Set @IdFisico = (SELECT MAX(IdFisico) From Inventario.tbInventarioFisicoDetalle

    where IdCompania = @IdCompania  AND IdLocal = @IdLocal)      

    MERGE Inventario.tbInventarioFisicoDetalle  AS T
    USING Inventario.TbItemLocal AS S ON (T.IdCompania = S.IdCompania AND T.IdLocal = S.IdLocal AND  T.IdItem = S.IdItem )
    WHEN MATCHED
    THEN UPDATE SET T.Actual = S.Saldo 
    WHEN NOT MATCHED BY TARGET
    THEN INSERT(IdCompania, IdLocal, IdFisico,IdItem, Actual, Fisico, Migrado)

                                                                           

    Me da el siguiente error:

    The MERGE statement conflicted with the FOREIGN KEY constraint "FK_tbInventarioFisicoDetalle_tbInventarioFisico". The conflict occurred in database "ANDINA", table "Inventario.tbInventarioFisico".

                                         

    Me indica FOREIGN KEY,  La Tabla Inventario.tbInventarioFisicoDetalle y la tabla Inventario.TbItemLocal se relacionan por IdCompania, Idlocal y el IdItem

    y solo deseo actualizar el campo Actual que se encuentra en la tabla de InventarioFisicoDetalle pero con el valor del campo Saldo de la tabla de tbItemLocal

    ESpero me halla podido explicar.

    Espero me ayuden...

    miércoles, 5 de septiembre de 2012 16:52

Respuestas

  • hola buen día amigo...

    si solo quieres actualizar y no insertar, en tu MERGE INTO estás especificando WHEN NOT MATCHED BY TARGET THEN INSERT, quitale eso.

    MERGE Inventario.tbInventarioFisicoDetalle  AS T
    USING Inventario.TbItemLocal AS S ON (T.IdCompania = S.IdCompania AND T.IdLocal = S.IdLocal AND  T.IdItem = S.IdItem )
    WHEN MATCHED
    THEN UPDATE SET T.Actual = S.Saldo 
    

    SALUDOS, prueba a ver que tal funciona...

    miércoles, 5 de septiembre de 2012 17:00

Todas las respuestas

  • hola buen día amigo...

    si solo quieres actualizar y no insertar, en tu MERGE INTO estás especificando WHEN NOT MATCHED BY TARGET THEN INSERT, quitale eso.

    MERGE Inventario.tbInventarioFisicoDetalle  AS T
    USING Inventario.TbItemLocal AS S ON (T.IdCompania = S.IdCompania AND T.IdLocal = S.IdLocal AND  T.IdItem = S.IdItem )
    WHEN MATCHED
    THEN UPDATE SET T.Actual = S.Saldo 
    

    SALUDOS, prueba a ver que tal funciona...

    miércoles, 5 de septiembre de 2012 17:00
  • Si lo encuentra solo actualizo, pero sino lo encuentro tengo insertarlo.

    y alli se muestra el mensaje de error.


    Marlene

    miércoles, 5 de septiembre de 2012 17:10
  • Aa ok, entonces el problema es que tu tabla Inventario.tbInventarioFisicoDetalle   ( que es tu tabla donde quieres insertar si no existe y actualizar si existe ), tiene una llave foránea relacionada a la tabla Inventario.tbInventarioFisico  en la cual, el campo que quieres insertar en la primera y por el que se relacionan, no existe en está ultima por eso te está marcando ese error, quiero suponer que es tu campo IdFisico por la lógica de los nombres... Por lo que puedo percibir es un error de integridad de datos....Espero te sirva de ayuda y no haberte enredado más :S.
    miércoles, 5 de septiembre de 2012 17:16
  • Si, amigo, así es !! 


    Marlene

    miércoles, 5 de septiembre de 2012 17:25
  • Entonces quedó solucionado ?? o te podemos ayudar en algo más ?? 

    ^__^ ! !

    miércoles, 5 de septiembre de 2012 17:29