標籤:
今天的第一次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 ONGOSET QUOTED_IDENTIFIER ONGO-- =============================================-- Author:<老牛>-- Create date: <2014-6-2 15:28:00>-- Description:<刪除正在上機的學生時同一時候將相關信-- 息加入到學生上機記錄表中>-- =============================================CREATE TRIGGER [dbo].[triq_T_OnlineDelete] ON [dbo].[T_Online] instead of InsertAS BEGINdeclare @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 [email protected]ENDGO
(PS:上段代碼(經測試正確)僅僅用到了表中的幾個欄位其它欄位也可用類似方法,特別要注意的是如何擷取下機時間(hh-mm-ss)和下機日期(yyyy-mm-dd),比如:Select CONVERT(varchar(100),GETDATE(), 24。Select CONVERT (varchar(10),getdate(),120))
心得體會
寫到這裡我想到那句話“的驅動力被發現,但”,我們還使用了學習過程SQL Server有一段時間,在我們接觸到的理論這麼多東西的接觸一直覺得非常深刻的方式。我會一直認為簡單的CRUD能夠解決眼前的問題。
我們將不再只有當我們學習一門新技術,會感覺。原來還有這樣的事情。
SQL Server---觸發