none
Valores Nulos e Com restrição Unique RRS feed

  • Pergunta

  • Pessoal estou aprendendo a usar Sql Server ainda e tenho uma dúvida com valores nulos com restrição!
    Por exemplo

    Tenho minha tabela

    A int not null identity(1,1),
    B varchar(50) Unique,
    C varchar(50) Unique,
    D varchar(50),
    Primary Key (A)

    A tabela é criada sem erros, só que quando começo a inserir valores da um erro;
    exemplo de inserção

    A        B       C        D  
    1        x      null     XXXX
    2        y     null               --- Na (coluna 3 linha 2) da erro pois ele entende que o Null é um valor inserido e repetido.


    Alguém já pegou um problema semelhante e conseguiu soluciona-lo?
    Não sei o pq está acontecendo isso , nunca aconteceu...




    quarta-feira, 25 de novembro de 2009 12:28

Respostas

  • Bom Dia,

    Realmente o SQL Server possui esse "deslize" em relação aos demais SGBDs. Sabendo-se que o nulo é um valor desconhecido, o correto seria permitir vários nulos em uma Unique Constraint já que um nulo não é igual ao outro. Esse efeito colateral ocorre em virtude das características de indexação de valores nulos que no SQL Server é diferente de outros SGBDs a exemplo do ORACLE. Todavia, esse efeito tem também suas vantagens em relação à pesquisa nesse campo.

    Possuo um artigo muito detalhado sobre esse "deslize" bem como soluções para resolvê-lo. Acredito que você achará a leitura bem interessante.

    Unique Constraints – Aplicações, Alternativas e um lapso "justificável" do SQL Server
    http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!710.entry

    [ ]s,

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

    A Impedância, o Mapeamento Objeto Relacional e Implementações – Parte II
    http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!814.entry
    Classifique as respostas. O seu feedback é imprescindível
    • Sugerido como Resposta Gustavo Maia Aguiar quarta-feira, 25 de novembro de 2009 12:45
    • Marcado como Resposta Danilocod quarta-feira, 25 de novembro de 2009 13:03
    quarta-feira, 25 de novembro de 2009 12:45

Todas as Respostas

  • Bom dia

    O problema está no fato de você estar tentando inserir o null na coluna C, quando você cria uma constraint do tipo UNIQUE o SQL Server permite que você inclua apenas registros diferentes, ou seja, você pode incluir NULL porém, apenas uma valor NULL.
    Anderson - DBA/MCP/MCTS/MCITP/MCT - Sua pergunta foi respondida ? Marque-a como tal! www.myspace.com/andersondpa
    quarta-feira, 25 de novembro de 2009 12:32
  • Bom Dia,

    Realmente o SQL Server possui esse "deslize" em relação aos demais SGBDs. Sabendo-se que o nulo é um valor desconhecido, o correto seria permitir vários nulos em uma Unique Constraint já que um nulo não é igual ao outro. Esse efeito colateral ocorre em virtude das características de indexação de valores nulos que no SQL Server é diferente de outros SGBDs a exemplo do ORACLE. Todavia, esse efeito tem também suas vantagens em relação à pesquisa nesse campo.

    Possuo um artigo muito detalhado sobre esse "deslize" bem como soluções para resolvê-lo. Acredito que você achará a leitura bem interessante.

    Unique Constraints – Aplicações, Alternativas e um lapso "justificável" do SQL Server
    http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!710.entry

    [ ]s,

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

    A Impedância, o Mapeamento Objeto Relacional e Implementações – Parte II
    http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!814.entry
    Classifique as respostas. O seu feedback é imprescindível
    • Sugerido como Resposta Gustavo Maia Aguiar quarta-feira, 25 de novembro de 2009 12:45
    • Marcado como Resposta Danilocod quarta-feira, 25 de novembro de 2009 13:03
    quarta-feira, 25 de novembro de 2009 12:45
  • Bom dia , meus caros!

    Anderson Obrigado,pela sua resposta!

    Gustavo,estou lendo teu artigo, é incrivel como tem várias formas de se resolver este problema!

    Muito obrigado mesmo ajudou bastante !!!

    quarta-feira, 25 de novembro de 2009 13:03