Pregunta

En Servidor MSSQL, Tengo una mesa Curso de alumno con un Clave primaria compuesta (Identificación del Estudiante, Curso de curso). Estoy tratando de cambiar al estudiante seleccionado a otro curso. Una El registro del estudiante de cada grupo de curso me impide hacer UPDATE operación.

StudentID CourseID

   1          1
   1          2
   1          3
   2          2
   2          3
   2          4

Puedo actualizar (1, 2), (1, 3) registros' Curso de curso a 5, pero no puedo actualizar (1, 1) registros Curso de curso a 5. Similar, puedo actualizar (2, 2), (2, 3) registros' Curso de curso a 5, pero no puedo actualizar (2,4) registros Curso de curso a 5.

Solo un registro de tal Curso de curso El grupo me impide cambiar su Curso de curso campo. Estoy teniendo el siguiente error.

Violación de la restricción de clave primaria 'PK_StudentCourse'. No se puede insertar la tecla duplicada en el objeto 'estudiantecribe'. La instrucción se ha terminado.

No sé que es el primero o el último registro de cada grupo que me prohíbe cambiar Curso de curso. Estoy seguro de que no hay registro con CursoD = 5 en Curso de alumno mesa, y tengo un registro de curso con Curso de curso de 5 en Curso mesa.

Cualquier ayuda sería apreciada.

¿Fue útil?

Solución 2

Encontré el problema. Cuando estaba construyendo condiciones para la cadena de consulta, una condición no estaba agregando criterios de GroupID. La cadena de consulta se pierde a esa crieria Groupid cuando ese registro se incluyó en la cadena de consulta. Estaba sucediendo de la siguiente manera.

UPDATE StudentCourse SET CourseID = 5 WHERE CourseID = 1 AND StudentID IN(2,3)
UPDATE StudentCourse SET CourseID = 5 WHERE StudentID IN(1,2,3)

UPDATE StudentCourse SET CourseID = 6 WHERE CourseID = 2 AND StudentID IN(2,3)
UPDATE StudentCourse SET CourseID = 6 WHERE StudentID IN(2,3,4)

Por supuesto, mi consulta estaba violando la regla clave principal sin criterios de curso. Gracias por tu tiempo, compañeros.

Otros consejos

El error que está viendo significa que está tratando de crear un registro con el mismo valor de la clave primaria que otro registro existente. Está cometiendo un error aquí, pero no está dando suficiente información, para comprender cuál es su error.

Cuando tengo un problema, me resulta útil crear una pequeña repro, que puede ilustrar el problema, para que pueda mostrarlo a otros usuarios. A veces, cuando trato de crear una repro simple, la repro realmente funciona sin problemas. Esto me permite saber que hay algo diferente en esta "repro" que funciona y mi caso de problemas. El siguiente paso para mí sería cerrar la brecha entre ellos, modificar cualquiera de ellos para aclararlos hasta que la diferencia de comportamiento desaparezca. El paso que lo hizo, generalmente revela el culpable del comportamiento que se está investigando.

En su caso, puedo hacer los siguientes pasos simples, para demostrar que SQL Server está funcionando como se esperaba:

Yo creo una mesa:

CREATE TABLE [dbo].[StudentCourse](
    [StudentID] [int] NOT NULL,
    [CourseID] [int] NOT NULL,
 CONSTRAINT [PK_StudentCourse] PRIMARY KEY CLUSTERED 
(
    [StudentID] ASC,
    [CourseID] ASC
))

Agrego datos de prueba en:

INSERT INTO [dbo].[StudentCourse] values (1,1)
INSERT INTO [dbo].[StudentCourse] values (1,2)
INSERT INTO [dbo].[StudentCourse] values (1,3)
INSERT INTO [dbo].[StudentCourse] values (2,2)
INSERT INTO [dbo].[StudentCourse] values (2,3)
INSERT INTO [dbo].[StudentCourse] values (2,4)

Realizo las actualizaciones que ha descrito:

UPDATE [dbo].[StudentCourse] SET CourseID = 5 where StudentId = 2 and CourseID = 4
UPDATE [dbo].[StudentCourse] SET CourseID = 5 where StudentId = 1 and CourseID = 1

Puedo ver que estos funcionan tal como deberían.

Trate de comprender lo que está haciendo de manera diferente y encontrará la causa de su problema.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top