/ / SQL Understanding Table Unique Constraints - sql, sql-server, tsql

SQL Understanding Table Unique Constraints - sql, sql-server, tsql

Spędziłem cały dzień próbując debugować problem dopiero terazWidzę, na czym polega problem od samego początku. Mam unikalne ograniczenie na moim stole, które wymusza tylko unikalne wartości jako numer katalogowy. Ja jednak nie wydaje mi się, aby dobrze rozumieć, co byłoby unikalne w tym przypadku. Mam dwa numery produktów MP1156 i 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"

Pojawia się błąd:

Msg 2627, Level 14, State 1, Line 5
Naruszenie ograniczenia UNIQUE KEY "UK_CNUMUNIQUE". Nie można wstawić duplikatu klucza do obiektu "dbo.IDWProductCodes". Zduplikowana wartość klucza to (MP115).

Co się dzieje, to za każdym razem, gdy wstawiampierwszy klucz, a następnie spróbuj wstawić drugi klucz, SQL zakłada, że ​​są takie same i nadpisuje pierwsze z drugim, efekt, którego w ogóle nie chcę.

To, czego naprawdę chcę, to możliwość wejściaróżne ciągi (bez duplikatów) w tabeli. Myślałem, że jedyne, co wymagało tego, to jedyne ograniczenie, ale teraz nie jestem pewien. Jakie jest lepsze lub najlepsze podejście do rozwiązania tego problemu?

Odpowiedzi:

0 dla odpowiedzi № 1

Myślę, że źle interpretujesz, co się dzieje. Ograniczenie SQL Unique nie spowoduje nadpisania istniejącego wiersza, jeśli spróbujesz wstawić duplikat. Druga wstawka, która narusza ograniczenie, zakończy się niepowodzeniem.

Proszę pokazać kod, którego używaszwstawki i struktura tabeli. Zmienię tę odpowiedź, aby rozwiązać prawdziwy problem po tym, jak to widzę, ale z podanych przez ciebie informacji unikalne ograniczenie nie jest problemem.

Upewnij się również, że nie masz TRIGGER na tym stole. Jest to jedyna rzecz, która mogłaby mi się przydać, by stworzyć takie zachowane zachowanie jak wstawka zastępująca istniejący wiersz.


0 dla odpowiedzi nr 2

Coś jeszcze się dzieje. SQL Server nie pomyli dwóch ciągów "MP115" i "MP115BP" jako tej samej wartości. Zostałeś poproszony kilka razy, aby opisać strukturę tabeli, abyśmy mogli ją zobaczyć. Robisz to za pomocą SSMS, klikając prawym przyciskiem myszy na stół i Tabela skryptów jako> CREATE to> Clipboard. Jeśli opublikujesz wyniki, być może będziemy w stanie Ci pomóc.

Tutaj jednak jest dzikie domysły. Czy jest możliwe, że masz kolumnę komputerową w tabeli, która obcina PRCatalogNumber do 5 znaków i ma na sobie inny UNIKALNY INDEKS? To spowodowałoby problem, który widzisz.