Modifica: quando dico "SQL Server", sto parlando davvero di Management Studio. Scusa se questo è stato confuso.SSMS consente record duplicati in una tabella, ma non aggiornamenti successivi
Oh, odio quando succedono cose del genere. Ieri stavo lavorando con SQL Server e ho provato il comando PIVOT per cercare di capire come funzionava. Così ho creato una nuova tabella con quattro colonne e la prima colonna avrebbe avuto lo stesso valore per le prime poche righe.
Ho aggiunto il "valore1" alla prima riga, prima colonna e ho premuto invio. Non sono state ancora aggiunte chiavi o vincoli, mi ha permesso di entrare nella riga successiva con NULL per le altre colonne sul primo riga (che va bene). Con mia sorpresa, mi ha anche permesso di inserire "value1" nella seconda riga e inserire down - questo dovrebbe essere impossibile dato che ora ci sono due righe identiche. Tuttavia, dato che stavo solo scherzando, questo non mi ha infastidito. Così procedo per creare quattro righe in quanto tale:
Tabella 1
Col1 Col2 Col3 Col4
---------------------------------
Value1 NULL NULL NULL
Value1 NULL NULL NULL
Value1 NULL NULL NULL
Value1 NULL NULL NULL
Ovviamente questo è strano e si rompe teoria relazionale, ma non mi importa davvero dal momento che questo è solo una tabella che ho creato per scherzare con. Tuttavia, ho quasi tirato i miei capelli a quello che è successo dopo. Dopo che ho avuto questi dati, non potrei fare nulla al tavolo. Se ho provato a compilare col2, col3 o col4 su una delle righe, SQL Server mi urlerebbe per avere righe duplicate: "Nessuna riga è stata aggiornata. I dati nella riga 1 non sono stati commessi .... Il valore della riga (s) aggiornati o eliminati o non rendono la riga univoca o alterano più righe (4 righe). "
Quindi in altre parole, SQL Server mi ha consentito di immettere righe duplicate, ma quando ho provato ad aggiornare le righe per renderle univoche, non mi avrebbe permesso, citando che ci sono righe duplicate come motivo. La parte peggiore è che non sono nemmeno riuscito a cancellare nessuna riga (ottengo lo stesso messaggio di errore). L'unica soluzione che ho trovato una volta in questo scenario è stata quella di eliminare la tabella e ricominciare da capo - il che è ridicolo.
La mia domanda è, come può esistere questo tipo di comportamento in un programma ben noto che si è evoluto in un decennio? Sono io che sono senza cervello e dovrei accettare il comportamento di SQL Server? Per me questo è inaccettabile e SQL Server non dovrebbe mai permettermi di inserire righe duplicate in primo luogo, o avrebbe dovuto permettermi di aggiornare le righe duplicate fino a quando non erano tutte uniche e quindi provare a salvare.
Questo non significa in alcun modo essere una sorta di post di odio per SQL Server. È relativamente raro che mi imbatto in un comportamento del genere, ma quando lo faccio, può davvero mettermi alla prova e farmi impazzire. Semplicemente non capisco perché il programma abbia un comportamento costruito in questo modo. Per quale motivo nel mondo mi ha permesso di inserire le righe duplicate in primo luogo se non avesse intenzione di farmi aggiustare?
Ricordo di aver lavorato con MS Access nel corso della giornata e mi sarei imbattuto in uno strano comportamento arcaico. Alcune volte ho dovuto copiare grandi quantità di dati, ricreare la tabella e ricrearla solo perché Access mi permetteva di fare qualcosa che non avrebbe dovuto, e ora mi sta bloccando da eventuali modifiche per risolverlo - producendo efficacemente un punto morto.
Quindi cosa sta succedendo qui? Ho bisogno di una sorta di cambiamento di paradigma quando ci si avvicina a SQL Server? Sono io o SQL Server questo è il problema? (Puoi dire che sono io, posso prenderlo.)
Grazie per aver effettivamente spiegato i motivi che hanno consentito di inserire gli inserti ma non aver consentito gli aggiornamenti/eliminazioni. Questo è stato molto utile. – JoeCool
Ah, capisco il messaggio di errore molto meglio ora. All'inizio pensavo che l'errore fosse una realizzazione latente delle righe duplicate, poiché in quel SSMS si stava "svegliando" e vedendo che se avessi cancellato una riga, ci sarebbero ancora tre duplicati e non potrebbe consentire duplicati. Ma no, non era in grado di cancellare la riga perché non sapeva quale dei quattro eliminare. – JoeCool