none
Por que o With NoCheck não funciona? RRS feed

  • Pergunta

  • Pessoal estou aplicando uma chave primaria em uma tabela na qual eu propositalmente inseri um valor duplicado. O comando que eu utilizo é:

    Alter Table Venda With NoCheck Add Constraint pk_Teste_Codigo Primary Key Clustered (Codigo)

    O Retorno é:

    Msg 1505, Level 16, State 1, Line 1
    The CREATE UNIQUE INDEX statement terminated because a duplicate key was found for the object name 'dbo.Venda' and the index name 'pk_Teste_Codigo'. The duplicate key value is (1).
    Msg 1750, Level 16, State 0, Line 1
    Could not create constraint. See previous errors.

    O que está faltando? Eu coloquei NOCHECK!!!

    segunda-feira, 19 de abril de 2010 17:16

Respostas

  • Boa Tarde,

    O NOCHECK só é válido para Check Constraints e Foreign Keys. Não é possível utilizá-lo para chaves primárias e unique constraints. Se a chave primária fosse duplicada na tabela pai, o que esperar de um registro na tabela filho que referenciasse a chave primária duplicada ? Sem dúvida um inconsistência impossível de ser tratada e justamente por isso não é permitida.

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.spaces.live.com


    Classifique as respostas. O seu feedback é imprescindível
    • Sugerido como Resposta Gustavo Maia Aguiar segunda-feira, 19 de abril de 2010 18:51
    • Marcado como Resposta Thiago, Moura terça-feira, 20 de abril de 2010 00:32
    segunda-feira, 19 de abril de 2010 18:50

Todas as Respostas

  • Boa Tarde,

    O NOCHECK só é válido para Check Constraints e Foreign Keys. Não é possível utilizá-lo para chaves primárias e unique constraints. Se a chave primária fosse duplicada na tabela pai, o que esperar de um registro na tabela filho que referenciasse a chave primária duplicada ? Sem dúvida um inconsistência impossível de ser tratada e justamente por isso não é permitida.

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.spaces.live.com


    Classifique as respostas. O seu feedback é imprescindível
    • Sugerido como Resposta Gustavo Maia Aguiar segunda-feira, 19 de abril de 2010 18:51
    • Marcado como Resposta Thiago, Moura terça-feira, 20 de abril de 2010 00:32
    segunda-feira, 19 de abril de 2010 18:50
  • Entendi... o sql server na minha opinião deveria dar um erro na execução do comando. Pois, ele criando a chave com o with nocheck dá um falso entendimento.
    terça-feira, 20 de abril de 2010 00:40
  • Olá Thiago,

    Sim eu concordo. Seria mais prudente dar uma advertência.

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.spaces.live.com


    Classifique as respostas. O seu feedback é imprescindível
    terça-feira, 20 de abril de 2010 13:53