Páginas

09 Agosto 2010

Unique Index no SQL Server no estilo MySQL

No banco de dados MySQL, por padrão, quando criamos um indice do tipo UNIQUE, este aceita vários valores NULL, por exemplo, uma tabela com os campos ID, Nome e CPF é possível adicionar vários registros com o campo CPF sendo NULL:

   1:  Insert Pessoa (Nome, CPF) values ('Fulano', null)
   2:  Insert Pessoa (Nome, CPF) values ('Ciclano', null)
   3:  Insert Pessoa (Nome, CPF) values ('Richard', ‘1’)
   4:  Insert Pessoa (Nome, CPF) values ('Matheus', ‘2’)



Se eu tentar fazer os inserts acima em um banco de dados SQL Server, ele tentará indexar o null também e o insert da linha 2 vai falhar.


Para que o null não seja indexado, deve-se criar o indice no SQL Server como segue:

CREATE UNIQUE INDEX IX_CPF ON Pessoa(CPF) WHERE (CPF IS NOT NULL)



Eu testei isso apenas no SQL Server 2008 R2.


Fonte: http://goo.gl/nNyV