觸發器約束表中資料重複

2021-04-16 09:31:17 字數 1946 閱讀 3670

--表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

gocreate table 表a(code varchar(10),channelid int)

gocreate trigger tr_instablea

on 表a

instead of insert

asbegin

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

endelse

insert into 表a select @code,@channelid

fetch next from cur into @code,@channelid

endclose cur

deallocate cur

endgo

create trigger tr_updtablea

on 表a

instead of update

asbegin

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

endelse

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

endfetch next from cur into @code,@channelid

endclose cur

deallocate cur

end

比較觸發器和約束

在sql server資料庫中提供了兩種主要機制來強制使用業務規則和資料完整性,它們是sql server約束和觸發器。觸發器其實就是乙個特殊型別的儲存過程,可以在執行某個操作時自動觸發。觸發器與約束都可以實現資料的一致性。那麼他們在使用的過程中,有哪些差異呢?約束和觸發器在特殊情況下各有優勢。約束...

比較觸發器和約束

在sql server資料庫中提供了兩種主要機制來強制使用業務規則和資料完整性,它們是sql server約束和觸發器。觸發器其實就是乙個特殊型別的儲存過程,可以在執行某個操作時自動觸發。觸發器與約束都可以實現資料的一致性。那麼他們在使用的過程中,有哪些差異呢?約束和觸發器在特殊情況下各有優勢。約束...

mysql 觸發器 臨時表 Mysql觸發器

mysql觸發器 1.建立觸發器 注意 觸發器只能建立在永久表上,不能對臨時表建立觸發器,語法如下 create trigger trigger name trigger time trigger event on table name for each row trigger stmt trigg...