1. 程式人生 > >SqlServer觸發器的使用

SqlServer觸發器的使用

首先:說明一個觸發器使用的場景。

1.伺服器0001上的Employee表負責儲存公司所有員工的最新資料,新員工入職、員工更換部門以及員工離職等資訊都存在該表中。

2.由於業務需求,公司新上了一個OA系統,為了確保系統正常平穩執行且不影響公司其他伺服器,所以OA系統就部署在了0002伺服器上。

3.OA系統需要公司員工的最新資訊,但是遠端連線頻繁調取0001伺服器上的Employee表會影響到0001伺服器的執行,而且OA系統需要員工最新的基礎資訊(姓名、工號、部門、在職狀態)以及新增一些自定義的員工資訊,資訊存在EmpInfo表中。

基於以上場景,考慮使用觸發器來完成。即在0001伺服器上Employee表新增觸發器來對0002伺服器上的EmpInfo表進行更新操作。

步驟1:分析需要建立的觸發器的型別

新員工入職,Emoloyee表會新增資料,Insert觸發器

員工更換部門,Employee表會更新資料,Update觸發器

員工離職,Employee表會刪除資料(一般不會刪除資料,但是為了下面有關刪除情況的觸發器操作,所以這裡作此假設),Delete觸發器。

步驟2:在0001伺服器上建立0002伺服器的遠端連線

因為要對0002伺服器的EmpInfo表進行增刪改操作,所以需要先建立遠端連線,指令碼如下:

exec sp_addlinkedserver 'server0002', ' ', 'SQLOLEDB ', '192.168.0.1' 
exec sp_addlinkedsrvlogin 'server0002

', 'false ',null, 'sa', '123456'

步驟3:編寫觸發器指令碼

Insert觸發器

create trigger trigger_sync_userdata_insert
on Employee
    for insert
as
begin
--對EmpInfo進行批量插入操作
insert server0002.dbo.EmpInfo select * from inserted
end
go

Update觸發器

create trigger trigger_sync_userdata_update
on Employee
    for update
as
begin
--對EmpInfo進行批量更新操作
update a set 
a.Dept=b.Dept,
a.Statues=b.Statues
from server0002.dbo.EmpInfo a
inner join inserted b on a.EmployeeNo= b.EmployeeNo
end
go

Delete觸發器

create trigger trigger_sync_userdata_delete
on Employee
    for delete
as
begin
--對EmpInfo進行批量刪除操作
delete from server0002.dbo.EmpInfo where EmployeeNo in (select EmployeeNo from deleted)
end
go

如上所示:三種觸發器已經建好,當0001伺服器的Employee表的資料進行增刪改的時候,對應的0002伺服器的EmpInfo表的資料也會對應的進行增刪改操作。

備註:

1.插入操作(Insert) 
Inserted表有資料,Deleted表無資料 

2.更新操作(Update) 
Inserted表有資料(新資料),Deleted表有資料(舊資料)

3.刪除操作(Delete) 
Inserted表無資料,Deleted表有資料