您的位置:首页 > 其它

触发器约束表中数据重复

2008-04-06 23:00 253 查看
--表A中有两个字段CODE和CHANNELID
--想写一个触发器,在添加或者修改的时候,不允许有CODE和CHANELID同时重复的
--比如 CHANNELID=1 的记录里面不能有两个CODE一样的,但是CHANNELID不同的话,CODE可以相等
--帮写个触发器或者约束,谢谢了
if object_id('表A') is not null
drop table 表A
if object_id('tr_InsTableA') is not null
drop trigger tr_InsTableA
if object_id('tr_UpdTableA') is not null
drop trigger tr_UpdTableA
go
create table 表A(CODE varchar(10),CHANNELID int)
go
create trigger tr_InsTableA
on 表A
instead of insert
as
begin
declare @CODE varchar(100),@CHANNELID int
declare cur cursor for select CODE,CHANNELID from inserted
open cur
fetch next from cur into @CODE,@CHANNELID
while(@@fetch_status=0)
begin
declare @i int
select @i=count(1) from 表A where CODE=@CODE and CHANNELID=@CHANNELID
print @i
if(@i=1)
begin
select * from 表A
end
else
insert into 表A select @CODE,@CHANNELID
fetch next from cur into @CODE,@CHANNELID
end
close cur
deallocate cur
end

go
create trigger tr_UpdTableA
on 表A
instead of update
as
begin
declare @CODE varchar(100),@CHANNELID int
declare cur cursor for select CODE,CHANNELID from inserted
open cur
fetch next from cur into @CODE,@CHANNELID
while(@@fetch_status=0)
begin
declare @i int
select @i=count(1) from 表A where CODE=@CODE and CHANNELID=@CHANNELID
print @i
if(@i=1)
begin
select * from 表A
end
else
begin
declare @oldCODE varchar(100),@oldCHANNELID int
select @oldCODE=CODE,@oldCHANNELID=CHANNELID from deleted
update 表A set CODE=@CODE,CHANNELID=@CHANNELID
where CODE=@oldCODE and CHANNELID=@oldCHANNELID
end
fetch next from cur into @CODE,@CHANNELID
end
close cur
deallocate cur
end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: