/ / SQL Grundlegendes zu Tabelleneinschränkungen - sql, sql-server, tsql

SQL Grundlegendes zu Tabelleneinschränkungen - sql, sql-server, tsql

Ich verbrachte den Tag damit, ein Problem nur jetzt zu debuggenIch sehe, was das Problem die ganze Zeit war. Ich habe eine eindeutige Einschränkung für meine Tabelle, die nur eindeutige Werte als Katalognummer erzwingt. Ich habe jedoch kein gutes Verständnis davon, was in diesem Fall einzigartig wäre. Ich habe zwei Produktnummern MP1156 und MP1156ZF.

Insert into IDWProductCodes( PRCEAN, PRCGTIN, PRCatalogNumber, PRCIsActive, PRIsReplaced, PrIsREPlacement,PRProductID)
Select
"11232", "23223", "MP115BP", 1, 0, 0, "267F104C-6BA4-4C7E-A0C1-6615CBB9DA4C"

Insert into IDWProductCodes( PRCEAN, PRCGTIN, PRCatalogNumber, PRCIsActive, PRIsReplaced, PrIsREPlacement,PRProductID)
Select
"11232", "23223", "MP115", 1, 0, 1, "267F104C-6BA4-4C7E-A0C1-6615CBB9DA4C"

Insert into IDWProductCodes( PRCEAN, PRCGTIN, PRCatalogNumber, PRCIsActive, PRIsReplaced, PrIsREPlacement,PRProductID)
Select
"11232", "23223", "MP15", 1, 1, 1, "267F104C-6BA4-4C7E-A0C1-6615CBB9DA4C"

Ich erhalte einen Fehler:

Msg 2627, Ebene 14, Status 1, Zeile 5
Verletzung der UNIQUE KEY-Einschränkung "UK_CNUMUNIQUE". Kann keinen doppelten Schlüssel in Objekt einfügen "dbo.IDWProduktCodes". Der doppelte Schlüsselwert ist (MP115).

Was passiert ist, ist jedes Mal, wenn ich das einfügezuerst den Schlüssel und dann versuchen, den zweiten Schlüssel einzufügen, SQL nimmt an, dass sie gleich sind und überschreibt den ersten mit dem zweiten, ein Effekt, den ich gar nicht möchte.

Was ich wirklich will, ist die Fähigkeit zu betretenverschiedene Strings (keine Duplikate) in der Tabelle. Ich hatte gedacht, dass eine einzigartige Einschränkung alles sein würde, was es dauern würde, aber jetzt bin ich mir nicht sicher. Was ist der bessere oder beste Ansatz, um dieses Problem zu lösen?

Antworten:

0 für die Antwort № 1

Ich denke, Sie interpretieren falsch, was vor sich geht. Eine SQL Unique-Einschränkung führt nicht zum Überschreiben der vorhandenen Zeile, wenn Sie versuchen, ein Duplikat einzufügen. Die zweite Einfügung, die die Einschränkung verletzt, wird fehlschlagen.

Bitte zeigen Sie den Code an, den Sie für den verwendenEinfügungen und die Tabellenstruktur. Ich werde diese Antwort modifizieren, um das wirkliche Problem anzugehen, nachdem ich das gesehen habe, aber von den Informationen, die Sie zur Verfügung gestellt haben, ist die einzigartige Einschränkung nicht das Problem.

Stellen Sie außerdem sicher, dass Sie keinen TRIGGER auf diesem Tisch haben. Das ist das einzige, was mir einfällt, dass solch ein wackeliges Verhalten wie ein Insert erzeugt, das eine bestehende Zeile ersetzt.


0 für die Antwort № 2

Etwas anderes passiert. SQL Server wird die beiden Zeichenfolgen "MP115" und "MP115BP" nicht als denselben Wert verwechseln. Sie wurden mehrmals gebeten, die Tabellenstruktur so zu scripten, dass wir sie sehen können. Verwenden Sie dazu SSMS, klicken Sie mit der rechten Maustaste auf die Tabelle und Skript Tabelle As> CREATE to> Zwischenablage. Wenn Sie die Ergebnisse veröffentlichen, können wir vielleicht mehr helfen.

Hier ist jedoch eine wilde Vermutung. Ist es möglich, dass Sie eine Computerspalte in der Tabelle haben, die PRCatalogNumber auf 5 Zeichen abschneidet und sich ein anderer UNIQUE INDEX darin befindet? Das würde das Problem verursachen, das Sie sehen.