表结构:UserID,UserName,Flag我想当Flag值为“1”时,UserName不能有重复的值,但如果Flag为其他值时,UserName中可以有重复值。该怎么写呢?或者能否用其他方式实现?
例如;
UserID    UserName    Flag
1         李四        1
2         王五        1
3         赵六        1
4         张三        0
5         张三        0
第一、二、三行,因为Flag为1,所以UserName中不能有重复值;但第四、五行的Flag值不为1,所以UserName可以有重复的值。

解决方案 »

  1.   

    怎么写这个触发器呢?因为对SQL不太熟,还请多多帮忙。
      

  2.   

    create trigger checkvalue
    on yourtb
    for insert,update
    as
    declare @UserName nvarchar(50)
    declare @Flag nvarchar(50)
    select @UserName = UserName,@Flag= Flag from inserted
    if @Flag != '女'
    begin
    if (select count(*) from users where UserName = @UserName)>1
    begin
    rollback
    raiserror(@UserName,16,1)
    end
    end
    go 
      

  3.   

    create trigger checkvalue
    on yourtb
    for insert,update
    as
    declare @UserName nvarchar(50)
    declare @Flag nvarchar(50)
    select @UserName = UserName,@Flag= Flag from inserted
    if @Flag != '女'
    begin
    if (select count(*) from yourtb where UserName = @UserName)>1
    begin
    rollback
    raiserror(@UserName,16,1)
    end
    end
    go 
      

  4.   

    create trigger checkvalue
    on yourtb
    for insert,update
    as
    declare @UserName nvarchar(50)
    declare @Flag int
    select @UserName = UserName,@Flag= Flag from inserted
    if @Flag != 0
    begin
    if (select count(*) from yourtb where UserName = @UserName)>1
    begin
    rollback
    raiserror(@UserName,16,1)
    end
    end
    go 我上面回复的两个都都是在我本地测试了一下以后没改全面,最后这个是ok 的,,
      

  5.   

    楼上基本正确,不过判断条件好像应该改为 if @Flag = 1 和 if (select count(*) from yourtb where UserName = @UserName)>0