Frage

Im MSSQL Server, Ich habe einen Tisch Studentcourse mit einer Zusammengesetzter Primärschlüssel (Studenten ID, Kurs-ID). Ich versuche, den ausgewählten Schüler in einen anderen Kurs zu ändern. Einer Die Schüleraufzeichnung jeder Kursgruppe hindert mich dazu, dies zu tun UPDATE Betrieb.

StudentID CourseID

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

Ich kann aktualisieren (1, 2), (1, 3) Aufzeichnungen' Kurs-ID zu 5, aber ich kann nicht aktualisieren (1, 1) Aufzeichnungen Kurs-ID zu 5. Ähnlich kann ich aktualisieren (2, 2), (2, 3) Aufzeichnungen' Kurs-ID zu 5, aber ich kann nicht aktualisieren (2,4) Aufzeichnungen Kurs-ID zu 5.

Nur eine Aufzeichnung von solchen Kurs-ID Gruppe hindert mich, ihre zu ändern Kurs-ID aufstellen. Ich bekomme den folgenden Fehler.

Verletzung der primären Schlüsselbeschränkung 'pk_studentcourse'. Der doppelte Schlüssel in Objekt 'StudentCourse' kann nicht eingefügt werden. Die Anweisung wurde beendet.

Ich weiß nicht, dass es mir die erste oder letzte Aufzeichnung jeder Gruppe ist, sich zu ändern Kurs-ID. Ich bin sicher, es gibt keine Aufzeichnung mit CursId = 5 in Studentcourse Tabelle, und ich habe einen Kursrekord mit Kurs-ID von 5 in Kurs Tisch.

Jede Hilfe wäre geschätzt.

War es hilfreich?

Lösung 2

Ich fand das Problem. Als ich Bedingungen für die Abfragebarstellung errichtete, fügte eine Bedingung keine Gruppenkriterien hinzu. Die Abfragezeichenfolge vermisst diese Groupid Crieria, als dieser Datensatz in der Abfragezeichenfolge aufgenommen wurde. Es geschah wie folgt.

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)

Natürlich verletzte meine Frage gegen die Hauptschlüsselregel ohne Kurs -ID -Kriterien. Danke für deine Zeit, Kumpels.

Andere Tipps

Der Fehler, den Sie sehen, bedeutet, dass Sie versuchen, einen Datensatz mit dem gleichen Wert des Primärschlüssels wie ein weiterer vorhandener Datensatz zu erstellen. Sie machen hier einen Fehler, geben aber nicht genügend Informationen, um zu verstehen, was Ihr Fehler ist.

Wenn ich ein Problem habe, finde ich es nützlich, einen kleinen Repro -Repros zu erstellen, der das Problem veranschaulichen kann, damit ich es anderen Benutzern zeigen kann. Manchmal, wenn ich versuche, einen einfachen Repro zu erstellen, funktioniert der Repro tatsächlich ohne Probleme. Dadurch wird ich wissen, dass in diesem "Repro -" -Unproblem etwas anderes ist. Der nächste Schritt wäre für mich, die Lücke zwischen ihnen zu schließen und beide zu ändern, um sie näher zu bringen, bis der Verhaltensunterschied verschwindet. Der Schritt, der es geschafft hat, zeigt normalerweise den Schuldigen des untersuchten Verhaltens.

In Ihrem Fall kann ich folgende einfache Schritte ausführen, um zu beweisen, dass SQL Server wie erwartet arbeitet:

Ich erstelle eine Tabelle:

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

Ich füge Testdaten hinzu in:

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)

Ich führe die von Ihnen beschriebenen Updates durch:

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

Ich kann sehen, dass diese so wie sie sollten.

Versuchen Sie zu verstehen, was Sie anders machen, und Sie werden die Ursache Ihres Problems finden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top