SQL Server---觸發器
今天第一次使用SQL Server中的觸發器感覺很方便,本文將簡單的向大家介紹一下SQL Server中的觸發器以及其簡單的使用。我會從其定義、原理、具體的用法分別大家講述。
定義
觸發器(trigger)是個特殊的存儲過程,它的執行不是由程序調用,也不是手工啟動,而是由某個事件來觸發,比如當對一個表進行操作(insert,delete,update)時就會激活它執行。
原理
觸發器可以查詢其他表,而且可以包含複雜的SQL語句。觸發器也可用於強製引用完整性,以便在多個表中添加、更新或刪除行時,保留在這些表之間所定義的關係。
SQLServer包括三種常規類型的觸發器:DML觸發器、DDL觸發器和登錄觸發器。
DML觸發器
當數據庫中表中的數據發生變化時,包括insert,update,delete任意操作,如果我們對該表寫了對應的DML觸發器,那麼該觸發器自動執行。
DDL觸發器
它是SqlServer2005新增的觸發器,主要用於審核與規範對數據庫中表,觸發器,視圖等結構上的操作。
登錄觸發器
登錄觸發器將為響應LOGON事件而激發存儲過程。
具體用法
再敲機房收費係統的時候,在涉及到學生上下機的時候,我們就要對T_Line和T_Online這兩張表進行操作,下機的時候我們需要刪除T_Online表中的信息將它寫入T_Line中。采用三層架構重構時,頓時覺得從一個表中得到數據返回U層再將其賦值給另一個實體當作參數最終傳入另一張表中很是麻煩。於是我就想到了觸發器。
SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: <老牛> -- Create date: <2014-6-2 15:28:00> -- Description: <刪除正在上機的學生時同時將相關信 -- 息添加到學生上機記錄表中> -- ============================================= CREATE TRIGGER [dbo].[triq_T_OnlineDelete] ON [dbo].[T_Online] instead of Insert AS BEGIN declare @CardNo numeric(11, 0) declare @studentNo numeric(11, 0) declare @studentName varchar(10) --獲取參數信息 select @CardNo=cardNo,@studentNo=studentNo ,@studentName=studentName from deleted --添加學生上機記錄 insert into T_Line (cardNo,studentNo ,studentName ) values (@CardNo,@studentNo,@studentName) --刪除正在上機的學生信息 delete T_Online where cardNo =@CardNo END GO
(PS:上段代碼(經測試正確)隻用到了表中的幾個字段其他字段也可用類似方法,特別要注意的是怎樣獲取下機時間(hh-mm-ss)和下機日期(yyyy-mm-dd),例如:Select CONVERT(varchar(100),GETDATE(), 24;Select CONVERT (varchar(10),getdate(),120))
心得體會
寫到這裏又想起了那句話“不將就是發現的原動力”,我們學習過程中也用到SQL Server一段時間了,之前我們也接觸到了很多理論上的東西總感覺很高深的樣子,總想著我會簡單的增刪改查就能解決目前的問題了。隻有我們不再將就的時候我們學習了新的技術,才會感覺到,原來也就這麼回事。
最後更新:2017-04-03 08:26:22