日期:2014-05-19  浏览次数:20413 次

如何设置约束
表结构: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可以有重复的值。

------解决方案--------------------
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 的,,
------解决方案--------------------
楼上基本正确,不过判断条件好像应该改为 if @Flag = 1 和 if (select count(*) from yourtb where UserName = @UserName)> 0