SQL Server中類似Oracle中before觸發器

暖楓無敵發表於2012-08-01

有這樣的應用情形,除了使用2表之間主外來鍵約束中啟用級聯修改和級聯刪除這種SQL Server自帶的解決方案外,我們還可以使用觸發器來完成類似的功能,以下通過一個刪除來舉例說明:

 

假如一個SysFuncDic(功能字典表)、SysFuncRights(功能許可權表),功能許可權表中的FuncID和功能字典表中FuncID有外來鍵約束關係,現在我們要刪除SysFuncDic中的記錄,因為做過外來鍵約束關係,所以無法刪除。解決的辦法是首先刪除SysFuncRights表中所有與FuncID對應的記錄即可。

 

create table SysFuncDic
(
  FuncID int not null identity(1,1) primary key,
  FuncName varchar(100)
)

create table SysFuncRights
(
   ID int not null primary key identity(1,1),
   FuncID int not null,
   EmpID int not null
)

insert into SysFuncDic values('AA')

insert into SysFuncDic values('BB')

insert into SysFuncDic values('CC')

insert into SysFuncRights values(1,12)
insert into SysFuncRights values(2,12)
insert into SysFuncRights values(3,12)

/***********************刪除觸發器**************************/
create trigger tri_delete on SysFuncDic
instead of delete
as
begin
  declare @FuncID int;
  select @FuncID = FuncID  from deleted;
  delete SysFuncDic where FuncID = @FuncID;
  delete SysFuncRights where FuncID = @FuncID;
end
/**********************************************************/
select * from SysFuncDic; --查詢功能字典表記錄

select * from SysFuncRights; --查詢功能許可權表中記錄

delete from SysFuncDic where FuncID=1; --刪除功能字典表中記錄,進行測試


相關文章