103 votes

Comment créer un index unique sur une colonne NULL?

J'utilise SQL Server 2005. Je souhaite contraindre les valeurs d'une colonne à être uniques, tout en autorisant NULLS.

Ma solution actuelle implique un index unique sur une vue comme celle-ci:

 CREATE VIEW vw_unq WITH SCHEMABINDING AS
    SELECT Column1
      FROM MyTable
     WHERE Column1 IS NOT NULL

CREATE UNIQUE CLUSTERED INDEX unq_idx ON vw_unq (Column1)
 

De meilleures idées?

107voto

Phil Haselden Points 1215

À l’aide de SQL Server 2008, vous pouvez créer un index filtré : http://msdn.microsoft.com/en-us/library/cc280372.aspx. (Je vois Simon ajouté cela comme un commentaire, mais pensé qu’il méritait sa propre réponse que le commentaire est facilement manqué)

Une autre option est un déclencheur pour vérifier l’unicité, mais cela pourrait affecter les performances.

73voto

onedaywhen Points 24594

Le truc de la colonne calculée est largement connu comme un « nullbuster » ; Mes notes de crédit Steve Kass :

24voto

Abyss Knight Points 2095

Assez sure you can do that, car il viole le but des visiteurs uniques.

Cependant, cette personne semble avoir un travail décent autour : http://sqlservercodebook.blogspot.com/2008/04/multiple-null-values-in-unique-index-in.html

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X