日期:2014-05-18 浏览次数:20471 次
CREATE TABLE [tb3] ( [myid] [char] (10) , [mytext] [char] (10) ) ALTER TABLE [tb3] ADD CONSTRAINT [wy] UNIQUE NONCLUSTERED ( [myid] ) insert into tb3 select null,'adsfad' union all select 'aaaa','adsfad' union all select 'bbbb','adsfad' union all select 'cccc','ccccd' select * from tb3 /* myid mytext ---------- ---------- NULL adsfad aaaa adsfad bbbb adsfad cccc ccccd (所影响的行数为 4 行) */
------解决方案--------------------
CREATE FUNCTION f_check(@a VARCHAR(10)) RETURNS BIT AS BEGIN 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 @bit END GO CREATE TABLE tb(a VARCHAR(10) NULL,CONSTRAINT ck_tb CHECK (dbo.f_check(a) = 0)) GO INSERT tb SELECT 'cc' UNION ALL SELECT NULL GO INSERT tb SELECT 'cc' GO INSERT tb SELECT NULL GO SELECT * FROM tb GO DROP TABLE tb DROP FUNCTION dbo.f_check /* (2 row(s) affected) Msg 547, Level 16, State 0, Line 1 The 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 ---------- cc NULL NULL (3 row(s) affected) */