SqlServer觸發器的格式+小例子解析

觸發器基本語法格式:

create trigger tri_name        
on table                                
for insert/update/deleted    
as

SQL code

觸發器基本語法解析:

create trigger tri_name        //(tri_name:自定義觸發器的名稱)
on table                                //(table:觸發器的表名)
for insert/update/deleted    //(觸發器類型:insert插入數據觸發,update更新數據觸發,deleted刪除數據觸發)

as

declare @kssj datetime         //(定義一個變量,做中間處理)
declare @sqbh char(40)

select @kssj = kssj,@sqbh = sqbh from inserted

                                                //插入數據時,插入的數據在表inserted

                                                //更新數據時,更新後的數據在表inserted,更新前的數據在表中deleted

                                                //刪除數據時,刪除的數據在表deleted

                                                //不同的操作可以取出不同的中間數據做處理,案例中是取出插入的數據

update table2 set isks = 1,kksj = @kssj where sqbh = @sqbh

                                                //根據中間處理做相應操作,案例的處理爲“將插入的值同步更新到另一個表

觸發器的限制:(觸發器是一種特殊的儲存過程)

一個表最多只能有三個觸發器,insert,update,delete

●每個觸發器只能用於一個表

●不能對視圖、臨時表創建觸發器

●Truncate table能刪除表,但不能觸發觸發器

●不能將觸發器用於系統表

合理地使用觸發器對性能的影響是正面的。在設計和使用觸發器時,經常地用sp_depends命令瞭解對象所關聯的觸發器是有好處的,該命令能列出觸發器影響的所有對象、表和視等。

在定義幾類數據庫對象的時候,對存儲過程、索引和觸發器要給予特別的注意,尤其存儲過程,它設計的好壞對數據庫性能的影響很大。

說明:Sybase觸發器使用的兩個測試表:Deleted表和Inserted表,它們都是臨時表,其結構與觸發器的基表結構相同,用來存放與修改相關的數據行。

常見的觸發器有三種:分別應用於Insert,Update,Delete事件。

使用觸發器的優點:

觸發器是自動的,它們在對錶的數據作了任何修改之後立即被激活。

觸發器可以通過數據庫中的相關表進行層疊更改。例如,可以在 titles 表的 title_id 列上寫入一個刪除觸發器,以使其它表中的各匹配行採取刪除操作。

觸發器可以強制限制,這些限制比用 CHECK 約束所定義的更復雜。與 CHECK 約束不同的是,觸發器可以引用其它表中的列。


小例子:

USE [SmartMeter]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO


ALTER  TRIGGER [dbo].[trg_FreezeDay_Insert]
   ON  [dbo].[FreezeDay]
   FOR Insert  
AS 
BEGIN
  
   DECLARE  @meterid varchar(40),@currdate datetime,@Currqty numeric(18,2),@currcbrq datetime
   
   SELECT @meterid=meterid,@currdate=freezedate,@Currqty=FreezeNumber,@currcbrq=ReadDate
   FROM inserted 
 
   begin
     delete from [gsdata].[dbo].[ChaoBiaoInfo] where YHBH=@meterid and CBRQ=@currcbrq and BYCBS=@Currqty and cbny=@currdate
     insert into [gsdata].[dbo].[ChaoBiaoInfo]([YHBH], [CBRQ], [BYCBS], [cbny])
     values(@meterid,@currdate,@Currqty,REPLACE( left(@currdate,7),'-',''))
  end

END
GO
發佈了24 篇原創文章 · 獲贊 2 · 訪問量 7684
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章