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