触发器约束表中数据重复
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
--想写一个触发器,在添加或者修改的时候,不允许有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
相关文章推荐
- SqlBulkCopy批量插入数据时,不执行触发器和约束的解决方法
- 触发器:防止数据重复插入
- 【转载】SqlBulkCopy批量插入数据时,不执行触发器和约束 解决方法
- 牛X清数据(停约束和触发器)
- 触发器-插入不重复数据
- mysql中创建唯一约束防止数据重复
- oracle在已有重复数据的列上创建唯一约束
- mysql中创建唯一约束防止数据重复
- ORACLE 利用触发器避免数据重复插入
- mysql 防止插入重复数据sql和触发器
- oracle在已有重复数据的列上创建唯一约束
- 有重复数据的表添加主键或唯一约束
- SqlBulkCopy批量插入数据时,不执行触发器和约束 解决方法
- 触发器-插入不重复数据2
- JAVA-20-数据约束、数据库设计三大范式、多表查询、存储过程、触发器、数据库权限
- 表中已存重复数据的情况,如何增加唯一性约束?
- 删除重复数据的触发器.sql
- SQL数据库约束行为---防止数据完全重复
- oracle在已有重复数据的列上创建唯一约束
- sql通过触发器避免导入重复数据