/本博文語法基於SQL SERVER 2008
自建函數FUNCTION
用戶自己寫的一些SQL代碼的組合,從而實現特定的功能
創建函數的語法:
CREATE FUNCTION function_name
(arg1 type1, arg2 type2, arg2 type3)
RETURNS ...
大多數情況下,運行函數會返回一個表,該表可以作爲select語句的from子句的對象來進行查詢,或者嵌套在where語句之中,從而實現邏輯比較複雜的查詢。
存儲過程PROCEDURE
涵義:類似於模塊的概念,是打包好的代碼,用於實現固定的功能,可以通過引用封裝好的存儲過程來提高開發的效率
創建存儲過程
CREATE RROCEDURE procedure_name
AS sql_statements
引用:只要給出參數就能調用封裝在存儲過程裏的語句
CALL procedure_name (arg1, arg2...)
意義:通過封裝存儲過程,可以大大提高數據庫的易用性,尤其是對於不會寫SQL代碼的人來講,只要在可視化界面輸入參數,就會自動調用存儲過程得出結果。
觸發器TRIGGER
涵義:對特定表執行特定操作時自動觸發——用於強制執行某些規則,保證數據庫裏的數據安全(比CHECK約束更嚴格)。比如說有一些關鍵數據,絕對不允許隨便改動,就可以弄一個觸發器,只要對這些數據執行insert/update/delete,就馬上執行回退操作,撤銷該操作。
語法:
CREATE TRIGGER trigger_name
ON table_name/view_name
FOR/AFTER/INSTEAD OF INSERT/UPDATE/DELETE
AS sql_statement
/after: 在指定操作之後觸發
/for:默認操作,默認after,用它跟用after沒區別
/instead of:不執行該操作而是執行觸發器本身
trigger的操作
- 刪除:DROP TRIGGER trigger_name
- 查看已有觸發器:
SELECT * FROM sysobjects WHERE xtype='TR'
- 修改:
ALTER TRIGGER trigger_name
ON table_name/view_name
FOR/AFTER/INSTEAD OF INSERT/DELETE/UPDATE
AS sql_statement
- 禁用
ALTER TABLE table_name
DISABLE TRIGGER trigger_name/ALL
GO
/ALL 禁用所有
引用的兩個特殊表:
inserted:剛剛插入的對象,保存insert和update操作導致的更新的行的複本
deleted:剛剛刪除的對象,保存delete和update操作導致的被刪除的原來的行的複本