日期:2014-05-17  浏览次数:20420 次

数据库数据不能重复问题
数据库中有假设三列 A  B  C  
A  学校名称 不可为空
B  班级名称 不可为空
C  班级荣誉 可为空 

要求是 A列的值可以重复  但是如果相同A列的值的话  B  C 列不可以重复 但是C列可能有Null值   

比如
  A    B    C
  1    1    1   对
  1    2    2   对
  1    1    2   错  A列为1 B列为1 的已经存在了
  1    1   NUll 错  
  1    3    1   错  A列为1 C列为1 的已经存在了
  1    4    4   对

  2    1    1   对
  2    1    2   错
  2    2    1   错 

应该创建什么触发器 或是索引什么的来进行限制呢?

------解决方案--------------------
呵呵,修改的只需要这样,加一个update就可以了:

create table tb(a int not null ,b int not null ,c int)
 
go
 
 
create trigger dbo.trigger_insert_tb
on tb
for insert,update
as
if (select COUNT(*) 
    from inserted i
    inner join tb t
            on t.a = i.a  and t.b = i.b) >= 2
   rollback
    
if (select COUNT(*) 
    from inserted i
    inner join tb t
            on t.a = i.a  and t.c = i.c) >= 2
   rollback
go