觸發器實例講解(三)

接(二)

--針對[捲菸銷售表],插入第三條測試數據,該數據中的捲菸品牌在 捲菸庫存表中找不到對應。

--觸發器將報錯。

INSERT INTO 捲菸銷售表(捲菸品牌,購貨商,銷售數量,銷售單價,銷售金額)

SELECT ’紅河V8’,’某購貨商’,10,60,600

GO

/*

結果集

服務器: 消息 50000,級別 16,狀態 1,過程 T_INSERT_捲菸銷售表,行 15

錯誤!該捲菸不存在庫存,不能銷售。

*/

--針對[捲菸銷售表],插入第三條測試數據,該數據中的捲菸品牌在 捲菸庫存表中庫存爲0

--觸發器將報錯。

INSERT INTO 捲菸銷售表(捲菸品牌,購貨商,銷售數量,銷售單價,銷售金額)

SELECT ’玉溪’,’某購貨商’,10,30,300

GO

/*

結果集

服務器: 消息 50000,級別 16,狀態 1,過程 T_INSERT_捲菸銷售表,行 29

錯誤!該捲菸庫存小於等於0,不能銷售。

*/

--查詢數據

SELECT * FROM 捲菸庫存表

SELECT * FROM 捲菸銷售表

GO

/*

補充:

1、本示例主要通過一個簡單的業務規則實現來進行觸發器使用的說明,具體的要根據需要靈活處理;

2、關於觸發器要理解並運用好 INSERTED DELETED 兩個系統表;

3、本示例創建的觸發器都是 FOR INSERT ,具體的語法可參考:

Trigger語法

CREATE TRIGGER trigger_name

ON { table | view }

[ WITH ENCRYPTION ] --用於加密觸發器

{

{ { FOR | AFTER | INSTEAD OF } { [ INSERT ] [ , ] [ UPDATE ] }

[ WITH APPEND ]

[ NOT FOR REPLICATION ]

AS

[ { IF UPDATE ( column )

[ { AND | OR } UPDATE ( column ) ]

[ ...n ]

| IF ( COLUMNS_UPDATED ( ) { bitwise_operator } updated_bitmask )

{ comparison_operator } column_bitmask [ ...n ]

} ]

sql_statement [ ...n ]

}

}

4、關於觸發器,還應該注意

(1)DELETE 觸發器不能捕獲 TRUNCATE TABLE 語句。

(2)、觸發器中不允許以下 Transact-SQL 語句:

ALTER DATABASE CREATE DATABASE DISK INIT

DISK RESIZE DROP DATABASE LOAD DATABASE

LOAD LOG RECONFIGURE RESTORE DATABASE

RESTORE LOG

 

 

轉自:http://www.cnblogs.com/xianqingzh/archive/2009/04/30/1447146.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章