/ / SQL Entendendo as Restrições Exclusivas da Tabela - sql, sql-server, tsql

SQL Entendendo as Restrições Exclusivas da Tabela - sql, sql-server, tsql

Passei o dia tentando depurar um problema apenas agoraEu vejo o que o problema tem sido o tempo todo. Eu tenho uma restrição exclusiva na minha tabela que força apenas valores exclusivos como número de catálogo. Eu, no entanto, não pareço ter uma boa compreensão do que seria singular neste caso. Eu tenho dois números de produto MP1156 e 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"

Eu recebo um erro:

Msg 2627, nível 14, estado 1, linha 5
Violação da restrição UNIQUE KEY "UK_CNUMUNIQUE". Não é possível inserir chave duplicada no objeto "dbo.IDWProductCodes". O valor da chave duplicada é (MP115).

O que vem acontecendo é cada vez que eu insiro oprimeira chave e, em seguida, tente inserir a segunda chave, o SQL assume que eles são os mesmos e substitui o primeiro com o segundo, um efeito que eu não quero de todo.

O que eu realmente quero é a capacidade de entrarstrings diferentes (sem duplicatas) na tabela. Eu tinha pensado que uma restrição única era tudo o que seria necessário, mas agora não tenho certeza. Qual é a melhor ou melhor abordagem para resolver este problema, por favor?

Respostas:

0 para resposta № 1

Eu acho que você está interpretando mal o que está acontecendo. Uma restrição SQL Unique não causará uma substituição da linha existente se você tentar inserir uma duplicata. A segunda inserção que viola a restrição falhará.

Por favor, mostre o código que você está usando para oinserções e a estrutura da tabela. Modificarei essa resposta para resolver o problema real depois de ver isso, mas a partir das informações fornecidas, a restrição exclusiva não é o problema.

Além disso, certifique-se de não ter um TRIGGER nessa tabela. Essa é a única coisa que posso imaginar que criaria um comportamento tão instável quanto uma inserção substituindo uma linha existente.


0 para resposta № 2

Algo mais está acontecendo. O SQL Server não confundirá as duas cadeias "MP115" e "MP115BP" como o mesmo valor. Você foi questionado várias vezes para planejar a estrutura da tabela para que possamos vê-la. Você faz isso usando o SSMS, clicando com o botão direito do mouse na tabela e Tabela de Script Como> CRIAR para> Área de Transferência. Se você publicar os resultados, poderemos ajudar mais.

Aqui está um palpite, no entanto. É possível que você tenha uma coluna de computador na tabela que trunca PRCatalogNumber para 5 caracteres e tem um UNIQUE INDEX diferente? Isso causaria o problema que você está vendo.