建立測試環境
USE TempDB
GO
DROP TABLE IF EXISTS tblTrigger
DROP TABLE IF EXISTS tblLog
DROP TRIGGER IF EXISTS triInsert
CREATE TABLE tblTrigger (ID int identity(1,1) Primary key , InsertTime datetime)
CREATE TABLE tblLog (ID int , InsertTime datetime)
GO
CREATE TRIGGER triInsert
ON tblTrigger
AFTER INSERT -- 限定 insert 時觸發
AS
BEGIN
INSERT INTO tblLog (ID , InsertTime)
SELECT ID , GETDATE()
FROM inserted
END
GO
驗證方式
透過 SQL Profile 來觀察 Trigger 觸發情況,請參考該篇筆記開啟 - [SQL] SQL Profile 側錄 Trigger,下述測試案例圖片,紅框代表批次 ( batch )、綠框代表 Trigger 觸發
測試案例 1 - 基礎 insert
測試語法
測試案例 2 - GO 拆分批次
DECLARE @now datetime = getdate()
INSERT INTO tblTrigger VALUES(@now)
INSERT INTO tblTrigger VALUES(@now)
INSERT INTO tblTrigger VALUES(@now)
測試結果:一個 batch 內 Trigger 被觸發三次,每次觸發都 insert 一筆資料測試案例 2 - GO 拆分批次
測試語法
測試案例 3 - GO 重覆執行
DECLARE @now datetime = getdate()
INSERT INTO tblTrigger (InsertTime) VALUES(@now)
GO
DECLARE @now datetime = getdate()
INSERT INTO tblTrigger VALUES(@now)
INSERT INTO tblTrigger VALUES(@now)
GO
測試結果:GO 會拆分 batch,所以第一個 batch 內會觸發 Trigger 一次,第二個 batch 內會觸發 Trigger 兩次,每次觸發都 insert 一筆資料測試案例 3 - GO 重覆執行
測試語法
測試案例 4 - 資料表值建構函式
DECLARE @now datetime = getdate()
INSERT INTO tblTrigger (InsertTime) VALUES(@now)
GO 3
測試結果:GO 數字會重覆執行 insert,所以是三個 batch 內各含一次觸發 Trigger,每次觸發都 insert 一筆資料
測試案例 4 - 資料表值建構函式
ˇ
測試語法
測試案例 5 - insert select
DECLARE @now datetime = getdate()
INSERT INTO tblTrigger (InsertTime) VALUES
(@now) , (@now) , (@now)
GO
測試結果:一個 batch 內觸發一次 Trigger,該觸發會 insert 多筆資料測試案例 5 - insert select
測試語法
DECLARE @now datetime = getdate()
INSERT INTO tblTrigger (InsertTime)
SELECT @now
FROM tblTrigger
WHERE ID BETWEEN 22 AND 25
測試結果:一個 batch 內觸發一次 Trigger,該觸發會 insert 多筆資料![[SQL] Trigger - insert 觸發-1](https://live.staticflickr.com/65535/53000150404_8e2e6401b9.jpg)
![[SQL] Trigger - insert 觸發-2](https://live.staticflickr.com/65535/53000370900_2095d1a73d.jpg)
![[SQL] Trigger - insert 觸發-3](https://live.staticflickr.com/65535/53000470438_f6d2fb14ef.jpg)
![[SQL] Trigger - insert 觸發-4](https://live.staticflickr.com/65535/52999397577_35e84d6671.jpg)
![[SQL] Trigger - insert 觸發-5](https://live.staticflickr.com/65535/52999397582_32c5656877.jpg)
![[SQL] SQL Profile 側錄 Trigger-1](https://live.staticflickr.com/65535/52997932570_267356d47a_z.jpg)
![[SQL] SQL Profile 側錄 Trigger-2](https://live.staticflickr.com/65535/52998167048_a0a2c7c6fc_z.jpg)
![[SQL] 累計加總應用 - 金額拆帳](https://live.staticflickr.com/65535/52988043516_51742abf81_z.jpg)
![[C#] 提供資料行已經屬於 DataGridView 控制項-1](https://live.staticflickr.com/65535/52975987088_ae3c04859a_w.jpg)
![[C#] 提供資料行已經屬於 DataGridView 控制項-2](https://live.staticflickr.com/65535/52975532946_5cb7c2df11_z.jpg)
![[C#] 提供資料行已經屬於 DataGridView 控制項-3](https://live.staticflickr.com/65535/52975914575_f8d658b9b5_z.jpg)
![[C#] 文化特性的日曆清單-1](https://live.staticflickr.com/65535/52968926323_a59b7d05df_n.jpg)
![[C#] 文化特性的日曆清單-2](https://live.staticflickr.com/65535/52968926308_c4b06cfb6f_z.jpg)
![[C#] 文化特性的日曆清單-4](https://live.staticflickr.com/65535/52968473616_4801e46931.jpg)
![[C#] 文化特性的日曆清單-3](https://live.staticflickr.com/65535/52968612079_3c528ce48e_z.jpg)
![[Win10] Microsoft Print to PDF-1](https://live.staticflickr.com/65535/52957441085_c9e7de8432_z.jpg)
![[Win10] Microsoft Print to PDF-2](https://live.staticflickr.com/65535/52957441090_9b6a41fc0f_w.jpg)
![[Win10] Microsoft Print to PDF-3](https://live.staticflickr.com/65535/52957202384_1d1be021e0_z.jpg)
![[Win10] Microsoft Print to PDF-4](https://live.staticflickr.com/65535/52957510953_8edfd2a32f_z.jpg)
![[Win10] Microsoft Print to PDF-5](https://live.staticflickr.com/65535/52957510948_4a16027ee4_z.jpg)
![[EF] edmx 無法產生 Model class-1](https://live.staticflickr.com/65535/52941860488_f1c750892d_z.jpg)
![[EF] edmx 無法產生 Model class-2](https://live.staticflickr.com/65535/52940774407_746a40a83e_z.jpg)
![[EF] edmx 無法產生 Model class-3](https://live.staticflickr.com/65535/52940774392_7dc33a212e_z.jpg)