none
Cual es la sentencia similar de MySql (on duplicate key Update) en SQL SERVER 2005 RRS feed

  • Pregunta

  • Hola buen día..

    Necesito utilizar una sentencia que me de el mismo resultado que ON DUPLICATE KEY UPDATE DE MYSQL en Sql Server 2005 profesional

    Estoy haciendo unos inserts dinamicos de una tabla a otra en donde tengo unos campos como claves primarias pero no se como hacerlo.

    En MySQL es facil solo hago esto INSERT INTO MITABLA (A,B,C) VALUES (1,2,3) ON DUPLICATE KEY UPDATE C=MIVALOR; como puedo simular o cual es el comando que hace lo mismo pero aqui en SQL Server 2005

     

    De antemano gracias por su respuesta..

     

    sábado, 27 de agosto de 2011 17:32

Respuestas

Todas las respuestas

  • Puedes poner un ejemplo para saber lo que hace esa instruccion?

     


    AMB

    Some guidelines for posting questions...

    sábado, 27 de agosto de 2011 18:03
  • Claro que si gracias por responder..

     

    Mira es muy facil supongamos....     

    tengo una tabla llamada Clientes con los siguientes campos.

    ID -   Usuario -   Nombre -   Apellidos

    1       USER1      NAME1       APE1

    2       USER2     NAME2   APE2

    3       USER3     NAME3   APE3

    Y el ID y Usuario son mi claves principales dentro de mi tabla..

    Ahora bien, si yo tratar ade insertar un campo de la siguiente manera

     

    INSERT INTO Clientes (ID,Usuario,Nombre,Apellidos) VALUES (2,USER2,NAMEX,APEX)

    Me daria un error en el cual me estaria diciendo que estoy intentando cuplicar un registro por que la llave principal ya existe... que es el ID y El Usuario

    Pero si yo hago esto

    INSERT INTO Clientes (ID,Usuario,Nombre,Apellidos) VALUES (2,USER2,NAMEX,APEX) ON DUPLICATE KEY UPDATE Nombre='NAMEX',Apellidos='APE2';

    Esto no me arrojaria ningun error, solo me cambiaria en el registro dos el nombre de NAME2 a NAMEX y el Apellido de APE2 a APEX

     

    Quisiera hacer esto pero en SQL Server.. 

    Gracias de antemano por su respueta..

     

     


    • Editado Roberto Urita sábado, 27 de agosto de 2011 19:00 mala edicion
    sábado, 27 de agosto de 2011 18:59
  • Roberto,

    El nombre de la sentencia es MERGE, pero fue introducida con la version 2008. No existe sentencia similar para versiones anteriores, asi que tendras que usar las sentencias INSERT / UPDATE y manejar concurrencia.

     


    AMB

    Some guidelines for posting questions...

    domingo, 28 de agosto de 2011 1:38
  • Hola.

    La forma de hacerlo sería preguntando si el registro existe y realizando acciones distintas en cada caso. Más o menos así:

    if exists (select ID from Clientes where ID = 2)
     --> el registro existe, update
     update Clientes set Nombre = 'NAMEX', Apellidos = 'APE2' where ID = 2
    else
     --> el registro no existe, insert
     INSERT INTO Clientes (ID,Usuario,Nombre,Apellidos) VALUES (2,USER2,NAMEX,APEX) 
    



    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.blogspot.es/ Sígueme en twitter en http://twitter.com/qwalgrande

    domingo, 28 de agosto de 2011 8:30
    Moderador