创建“允许为空,但不为空时不能重复”的约束
我有一个字符串(最长18位)的列,要求创建“允许为空,但不为空时不能重复”的约束,不知哪位大侠能否解决,谢谢!
[解决办法]
CREATE TABLE [tb3] ( [myid] [char] (10) , [mytext] [char] (10) )ALTER TABLE [tb3] ADD CONSTRAINT [wy] UNIQUE NONCLUSTERED ( [myid] ) insert into tb3select null,'adsfad' union allselect 'aaaa','adsfad' union allselect 'bbbb','adsfad' union allselect 'cccc','ccccd'select * from tb3/*myid mytext ---------- ---------- NULL adsfad aaaa adsfad bbbb adsfad cccc ccccd (所影响的行数为 4 行)*/
[解决办法]
CREATE FUNCTION f_check(@a VARCHAR(10))RETURNS BITASBEGIN DECLARE @bit BIT SELECT @bit = 0 WHERE (SELECT COUNT(1) FROM tb WHERE a = @a) = 1 OR @a IS NULL SET @bit = ISNULL(@bit,1) RETURN @bitENDGOCREATE TABLE tb(a VARCHAR(10) NULL,CONSTRAINT ck_tb CHECK (dbo.f_check(a) = 0))GOINSERT tb SELECT 'cc' UNION ALL SELECT NULLGOINSERT tb SELECT 'cc'GOINSERT tb SELECT NULLGOSELECT * FROM tbGODROP TABLE tb DROP FUNCTION dbo.f_check/*(2 row(s) affected)Msg 547, Level 16, State 0, Line 1The INSERT statement conflicted with the CHECK constraint "ck_tb". The conflict occurred in database "WebReport", table "dbo.tb", column 'a'.The statement has been terminated.(1 row(s) affected)a----------ccNULLNULL(3 row(s) affected)*/