Messaggio di errore...

lunedì 20 ottobre 2008 - 11.51

bolla111 Profilo | Senior Member

sto facendo un progetto in visual veb developer.

ho bisogno di fare un update di una tabella ma mi viene visualizzato questo errore:
Violazione del vincolo PRIMARY KEY Impossibile inserire la chiave duplicata nell'oggetto.

TAID,TAIDIN e DAID formano la chiave primaria della tabella; TAID e TAIDIN sono anche chiave esterna di una tabella le quali chiavi primarie sono proprio TAID e TAIDIN.

queste sono le query che ho provato a fare ma il risultato è sempre lo stesso:
"UPDATE DTLASSTASK SET DAID=@nDAID, DAQTA=@nDAQTA FROM DTLASSTASK WHERE TAID=@nTAID AND TAIDIN=@nTAIDIN"

"UPDATE DTLASSTASK SET DAID=@nDAID, DAQTA=@nDAQTA FROM DTLASSTASK INNER JOIN ESTASKASS ON DTLASSTASK.TAID=ESTASKASS.TAID WHERE ESTASKASS.TAID=@nTAID AND ESTASKASS.TAIDIN=@nTAIDIN"

sapreste aiutarmi?

lbenaglia Profilo | Guru

>ho bisogno di fare un update di una tabella ma mi viene visualizzato
>questo errore:
>Violazione del vincolo PRIMARY KEY Impossibile inserire la chiave
>duplicata nell'oggetto.

Ciao Fabio,

Che DBMS utilizzi?

>TAID,TAIDIN e DAID formano la chiave primaria della tabella;
>TAID e TAIDIN sono anche chiave esterna di una tabella le quali
>chiavi primarie sono proprio TAID e TAIDIN.
>
>queste sono le query che ho provato a fare ma il risultato è
>sempre lo stesso:
>"UPDATE DTLASSTASK SET DAID=@nDAID, DAQTA=@nDAQTA FROM DTLASSTASK
>WHERE TAID=@nTAID AND TAIDIN=@nTAIDIN"
>
>"UPDATE DTLASSTASK SET DAID=@nDAID, DAQTA=@nDAQTA FROM DTLASSTASK
>INNER JOIN ESTASKASS ON DTLASSTASK.TAID=ESTASKASS.TAID WHERE
>ESTASKASS.TAID=@nTAID AND ESTASKASS.TAIDIN=@nTAIDIN"

Questi comandi aggiornano DAID che fa parte della PK specificando nella clausola WHERE solo TAID e TAIDIN.
Di conseguenza stai cercando di aggiornare più righe, generando una violazione della PK.

>sapreste aiutarmi?
Posta la struttura della tabella (CREATE TABLE) completa di constraints, alcune righe di prova (INSERT INTO) ed il result set finale che vuoi ottenere con quei dati.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

bolla111 Profilo | Senior Member

io uso ms sql server 2005
le tabelle le creo nonrmalmente, non da codice...
cmq il mio obiettivo è quello di modificare solo un parametro (daqta) gli altri glieli devo passare e basta, tanto non vengono modificati, sono di sola lettura...
cmq ho specificato nella WHERE anche DAID=@nDAID e sembra funzionare...l'unico problema è che non mi carica + la pagina dopo ma non è un problema di query...
cmq grazie...

lbenaglia Profilo | Guru

>io uso ms sql server 2005
>le tabelle le creo nonrmalmente, non da codice...
Genera lo script da SSMS...

>cmq il mio obiettivo è quello di modificare solo un parametro
>(daqta) gli altri glieli devo passare e basta, tanto non vengono
>modificati, sono di sola lettura...
>cmq ho specificato nella WHERE anche DAID=@nDAID e sembra funzionare...l'unico
>problema è che non mi carica + la pagina dopo ma non è un problema
>di query...
Se non specifichi TUTTA la PK nella clausola WHERE, andrai a modificare n righe. Se la combinazione dei valori delle 3 colonne che costituiscono la PK viene ripetuta per più di una riga, otterrai l'errore evidenziato nel primo post.

>cmq grazie...
Prego cmq

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5