數據庫的存儲過程理解為,處理數據的子程序,寫起來像函數,用起來像函數,在SQL Server中存儲過程分為兩大類,系統的和自定義的,系統的都放在master系統數據庫中,自定義就是自己去寫的,用DDL的相關語句即可,創建存儲過程,就像函數一樣,可以有參,也可以無參,無參的時候寫起來很簡單:
CREATE PROC hello AS BEGIN /*....*/ END GO
執行的時候也是,只需要在自定義存儲過程執行即可
EXEC hello
有參的時候寫法也不陌生:
CREATE PROC hello_1 @n1 int AS BEGIN //..... END GO EXEC hello_1 '123' /*或者 EXEC hello_1 @n2='123'*/
在執行的時候如果是批處理的第一條語句則可以將EXEC省略
在編寫的時候,會有許多不同的需求,存儲過程時沒有返回值的,我們需要返回相關信息的時候就希望類似於C/C++一樣傳入指針或者引用,在SQL Server中實現的方式是在變量之后加上OUTPUT。
對參數進行修飾的屬性還有很多:
VARYING | 只適用於輸出參數為Cursor變量,該參數由存儲過程動態構造 |
參數=值 | 表示默認值 |
READONLY | 修飾不能在存儲過程中更新或者修改的參數,類似於C/C++的const |
RECOMPILE | 執行存儲過程時重新編譯 |
注意事項:
自定義存儲過程只能在當前數據庫中創建,臨時存儲過程除外,臨時存儲過程在系統數據庫tempdb創建
存儲過程創建成功之后,過程名在sysobjects中,語句文本存放在syscomment中
自動執行存儲過程是SQL Server在啟動過程中自動執行的一些存儲過程,這些存儲過程都不能有參數的。