Domanda

In Server MSSQL, Ho un tavolo StudentCourse con un Chiave primaria composita (StudentID, CourseD). Sto cercando di cambiare lo studente selezionato in un altro corso. Uno Il record degli studenti di ogni gruppo di corsi mi impedisce di farlo UPDATE operazione.

StudentID CourseID

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

Posso aggiornare (1, 2), (1, 3) Records ' CourseD a 5, ma non posso aggiornare (1, 1) record CourseD a 5. Similare, posso aggiornare (2, 2), (2, 3) Records ' CourseD a 5, ma non posso aggiornare (2,4) record CourseD a 5.

Solo un record di tale CourseD Il gruppo mi sta impedendo di cambiare il suo CourseD campo. Sto ricevendo il seguente errore.

Violazione del vincolo chiave primario "PK_StudentCourse". Impossibile inserire una chiave duplicata nel "StudentCourse" dell'oggetto. La dichiarazione è stata terminata.

Non so che sia il primo o l'ultimo record di ogni gruppo mi vieta di cambiare CourseD. Sono sicuro che non ci sono record con CourseD = 5 in StudentCourse tavolo e ho un record di corso con CourseD di 5 in Corso tavolo.

Qualsiasi aiuto sarebbe apprezzato.

È stato utile?

Soluzione 2

Ho trovato il problema. Quando stavo costruendo condizioni per la corda di query, una condizione non aggiungeva criteri GroupID. La stringa di query sembra perdere quella groupid Crieria quando quel record è stato incluso nella stringa di query. Stava accadendo come segue.

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)

Naturalmente, la mia domanda stava violando la regola chiave primaria senza criteri di CourseD. Grazie per il tuo tempo, compagni.

Altri suggerimenti

L'errore che stai vedendo significa che stai cercando di creare un record con lo stesso valore della chiave primaria di un altro record esistente. Stai commettendo un errore qui, ma non stai dando abbastanza informazioni, per capire qual è il tuo errore.

Quando ho un problema, trovo utile creare una piccola riproduzione, che può illustrare il problema, in modo da poterlo mostrare ad altri utenti. A volte, quando provo a creare una semplice riproduzione, la riproduzione funziona effettivamente senza problemi. Questo mi fa sapere che c'è qualcosa di diverso in questa "riproduzione" funzionante e nel mio caso problematico. Il prossimo passo per me sarebbe quello di colmare il divario tra loro, modificare uno di loro per avvicinarli fino a quando la differenza nel comportamento scompare. Il passo che lo faceva, di solito rivela il colpevole del comportamento da indagare.

Nel tuo caso posso fare seguenti semplici passaggi, per dimostrare che SQL Server funziona come previsto:

Creo una tabella:

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

Aggiungo i dati di test 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)

Eseguo gli aggiornamenti che hai descritto:

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

Vedo che funzionano come dovrebbero.

Cerca di capire cosa stai facendo diversamente e troverai la causa del tuo problema.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top