Contrainte unique multi-colonne TSQL qui autorise également plusieurs nuls

Je suis en train de migrer MS Access vers SQL Server. Depuis Access permet plusieurs Nulls sur des index uniques où, comme SQL Server ne … J'ai géré la migration en supprimant les index dans SQL Server et en ajoutant des index filtrés: CREATE UNIQUE NONCLUSTERED INDEX idx_col1_notnull ON tblEmployee(col1) WHERE col1 IS NOT NULL;

Le problème que je rencontre est que je ne suis pas sûr de savoir comment implémenter des index «filtrés» composites ou multi-colonnes … ou si cela est vraiment possible car je n'ai trouvé aucun exemple dans mes searchs.

J'ai une idée pour l'implémenter en créant des index filtrés comme ça:

 CREATE UNIQUE NONCLUSTERED INDEX idx_col1col2_notnull ON tblEmployee(col1,col2) WHERE col1 IS NOT NULL 

Et puis en ajoutant un deuxième index filtré:

 CREATE UNIQUE NONCLUSTERED INDEX idx_col2col1_notnull ON tblEmployee(col1,col2) WHERE col2 IS NOT NULL 

Mais je ne suis pas sûr si cela fonctionnerait encore et encore less la meilleure méthode. Des orientations dans la bonne direction seraient grandement appréciées.

Vous pouvez append l'index suivant pour indexer uniquement les colonnes non nullables:

 create table tblEmployee(col1 int, col2 int) go create unique nonclustered index idx_col1col2_notnull ON tblEmployee(col1,col2) where col1 is not null and col2 is not null go --This Insert successeds insert into tblEmployee values (null, null), (null, null), (1, null), (1, null), (null, 2), (null, 2) --This Insert fails insert into tblEmployee values (3, 4), (3, 4)