Necesita explicación No se puede insertar una fila de clave duplicada en el objeto de error

Que estoy haciendo:

SELECT uid, intStatus from dbo.MYTABLE 
WHERE 
intStatus = 10 and uid = 'a1a1a1a1-a1a1-a1a1-a1a1-a1a1a1a1a1a1'

Y me sale:

        uid                            |  intStatus 
-------------------------------------- +---------------
'a1a1a1a1-a1a1-a1a1-a1a1-a1a1a1a1a1a1  | 10

Entonces la necesidad de realizar una actualización, tengo la necesidad de intStatus ser mayor de 18 para que el uid. Lo que yo hago:

UPDATE dbo.MYTABLE  SET intStatus = 18 
WHERE 
intStatus = 10 and uid = 'a1a1a1a1-a1a1-a1a1-a1a1-a1a1a1a1a1a1'

Y aquí es donde me da el error:

No se puede insertar una fila de clave duplicada en el objeto ‘dbo.MITABLA’ con índice único ‘ixMYTABLE’.

Puede alguien, por favor, dime por qué estoy recibiendo este error? ¿Cómo puedo solucionarlo?

uid es la clave principal para MYTABLE

intStatus es no nulo de tipo int

Un millón de gracias!

  • Hay algo en el diseño de base de datos que no permite valores duplicados de intStatus en esa tabla, y hay otro registro con valor de 18. La forma de solucionarlo es averiguar por qué los duplicados no está permitido. Probablemente hay una muy buena razón. Entonces usted tiene que tomar otra mirada en lo que usted está tratando de lograr.
  • Los estados de error ixMYTABLE índice único. ¿Cuál es la composición de este índice único?
  • uid es uniqueidentifier clave primaria, no null y intStatus es un int no null
  • Puedes publicar el script para la creación de la tabla? Por favor incluir el índice y restringir la creación así.
  • Esto era resuelto? Estoy teniendo el mismo problema y no puedo reducir a donde mi PK va a ser duplicado
InformationsquelleAutor user523129 | 2013-10-10

3 Kommentare

  1. 0

    Probablemente ya tienes una fila con intStatus 18 y el uid ‘a1a1…’

    Intente ejecutar y ver si usted tiene ya la fila que intenta crear con su ACTUALIZACIÓN:

    SELECT uid, 
           intStatus 
      FROM dbo.MYTABLE 
     WHERE intStatus = 18 
       AND uid = 'a1a1a1a1-a1a1-a1a1-a1a1-a1a1a1a1a1a1'
    • no hay filas para intStatus 18 y el uid ‘a1a1a1a1-a1a1-a1a1-a1a1-a1a1a1a1a1a1’
    • si el uid es la clave, no se puede tener un duplicado de valor, incluso mediante una actualización. Clave única significa que sólo una fila con un valor dado en cualquier momento.
  2. 0

    Si el uid es su principal clave, entonces, es único por definición, por lo tanto, la intStatus condición es irrelevante. Esto debería funcionar:

    UPDATE dbo.MYTABLE  SET intStatus = 18 
    WHERE  uid = 'a1a1a1a1-a1a1-a1a1-a1a1-a1a1a1a1a1a1';

    Si eso no funciona, entonces usted podría tener una clave compuesta la combinación de ambas columnas en lugar de una sola columna clave.

    Información sobre las claves primarias y compuestos

  3. -1

    intStatus es único
    thatswhy mysql lanza un error.

    si quieres u a ejecutar esa consulta intStatus no debe ser único

    • intStatus es un int no null

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea