none
Error Violation of UNIQUE KEY en el Insert Into

    Pregunta

  • Buenos dias comunidad tengo este problema al realizar un insert into en una tabla que tengo:

    Violation of UNIQUE KEY constraint 'UQ__se_pisos__D3E9CA260CCD51A2'. Cannot insert duplicate key in object 'dbo.se_pisos'. The duplicate key value is (ONCO).
    The statement has been terminated.

    la consulta que tengo es la siguiente:

    insert into se_pisos(sp_codigo,sp_descripcion,sp_entrecomida,sp_scc_id,sp_estado,sp_abrevia)
    SELECT       max(spc_piso) AS sp_codigo, spc_nom_piso AS sp_descripcion, 0 AS sp_entrecomida, (SELECT scc_id from se_centro_costos) AS sp_scc_id, 0 AS sp_estado, 1 AS sp_abrevia
    FROM            dbo.servinte AS s
    group by spc_nom_piso

    Me debe de ingresar un dato o varios si no se encuentran en la tabla:

    UCBN CUIDADO BASICO NEONATAL         0 1 0 1
    UCEA CUIDADO ESPECIAL ADULTO         0 1 0 1
    UCEN CUIDADO ESPECIAL NEONATAL         0 1 0 1
    UCIA         CUIDADO INTENSIVO ADULTO         0 1 0 1
    UCIN         CUIDADO INTENSIVO NEONATAL  0 1 0 1
    UB01 OBSERVACION URGENCIAS HMUA 0 1 0 1
    ONCO ONCOLOGIA                               0 1 0 1
    T2P1         TORRE 2 PISO 1                          0 1 0 1
    T2P2         TORRE 2 PISO 2                                 0 1 0 1
    T3P1         TORRE 3 PISO 1                                 0 1 0 1
    T3P2         TORRE 3 PISO 2                           0 1 0 1
    T3P3         TORRE 3 PISO 3                                 0 1 0 1
    TAP2         TORRE ALIANZAS PISO 2                 0 1 0 1
    TAP5         TORRE ALIANZAS PISO 5                 0 1 0 1
    TAP6         TORRE ALIANZAS PISO 6                 0 1 0 1
    TAP7         TORRE ALIANZAS PISO 7                 0 1 0 1
    TAP8         TORRE ALIANZAS PISO 8                 0 1 0 1
    CECV UCE CARDIOVASCULAR                 0 1 0 1

    Y me debe ingresar las dos ultimos datos pero me sale ese error

    Muchas gracias de antemano por la colaboracion

    sábado, 18 de mayo de 2019 14:30

Respuestas

  • Aproximadamente tiene que quedarte más o menos como te pongo a continuación:

    insert into se_pisos(sp_codigo,sp_descripcion,sp_entrecomida,sp_scc_id,sp_estado,sp_abrevia)
    SELECT max(spc_piso) AS sp_codigo, spc_nom_piso AS sp_descripcion, 0 AS sp_entrecomida, (SELECT scc_id from se_centro_costos) AS sp_scc_id, 0 AS sp_estado, 1 AS sp_abrevia
    FROM dbo.servinte AS s
    group by spc_nom_piso
    having max(spc_piso) not in (select sp_codigo from se_pisos)

    • Marcado como respuesta Sotoweb sábado, 18 de mayo de 2019 18:38
    sábado, 18 de mayo de 2019 18:29

Todas las respuestas

  • Con toda seguridad, el mensaje de error tiene razón. Te dice que hay un error porque estás intentando insertar un dato duplicado en una columna que no admite duplicados. Revisa con cuidado la información que hay en la tabla y la que estás intentando insertar, porque es seguro que hay un duplicado.

    > Me debe de ingresar un dato o varios si no se encuentran en la tabla

    No, en esa sentencia que has escrito no hay nada que cumpla la parte de "si no se encuentran". La sentencia dice "selecciona datos e insértalos". Si en lo que ha seleccionado hay algo que ya existía en la tabla de destino, se produce un error diciendo que está duplicado. Podrías añadir una cláusula "... where sp_codigo not in (select sp_codigo from se_pisos)" para que no te seleccione lo que ya existe.

    sábado, 18 de mayo de 2019 15:54
  • Muchas gracias Alberto Poblacion por la respuesta estoy tratando de ingresar ese where pero no me da no se como ingresarlo 
    sábado, 18 de mayo de 2019 17:50
  • Aproximadamente tiene que quedarte más o menos como te pongo a continuación:

    insert into se_pisos(sp_codigo,sp_descripcion,sp_entrecomida,sp_scc_id,sp_estado,sp_abrevia)
    SELECT max(spc_piso) AS sp_codigo, spc_nom_piso AS sp_descripcion, 0 AS sp_entrecomida, (SELECT scc_id from se_centro_costos) AS sp_scc_id, 0 AS sp_estado, 1 AS sp_abrevia
    FROM dbo.servinte AS s
    group by spc_nom_piso
    having max(spc_piso) not in (select sp_codigo from se_pisos)

    • Marcado como respuesta Sotoweb sábado, 18 de mayo de 2019 18:38
    sábado, 18 de mayo de 2019 18:29
  • Muchas Gracias Alberto Pobladome funciono excelente; 

    sábado, 18 de mayo de 2019 18:39