USE tempdb CREATE FUNCTION dbo.CheckUniqueT1F1 (@id INT, @F1 VARCHAR(10)) RETURNS BIT AS BEGIN RETURN (SELECT 1 FROM dbo.T1 WHERE id<>@id AND f1=@F1) END GO CREATE TABLE dbo.T1 (id INT IDENTITY, F1 VARCHAR(10) NULL) GO ALTER TABLE dbo.T1 ADD CONSTRAINT CK_T1_UniqueF1 CHECK (([dbo].[CheckUniqueT1F1]([id], [F1]) is null)) GO INSERT dbo.T1 (F1) VALUES ('A') INSERT dbo.T1 (F1) VALUES ('B') INSERT dbo.T1 DEFAULT VALUES INSERT dbo.T1 DEFAULT VALUES INSERT dbo.T1 DEFAULT VALUES INSERT dbo.T1 (F1) VALUES (NULL) GO INSERT dbo.T1 (F1) VALUES ('A') SELECT * FROM dbo.T1 DROP TABLE dbo.T1 DROP FUNCTION dbo.CheckUniqueT1F1You can adapt it to the empty value.