預存程序是資料庫伺服器端預編譯的 SQL 程式碼模組,封裝複雜業務邏輯、提升效能與安全性。本文釐清定義、列舉四大優勢,並給出增刪改查基本範本。
將常用或複雜的 SQL 作業預先撰寫、編譯並以特定名稱儲存於資料庫中;後續呼叫只需
EXEC 程序名,資料庫引擎直接執行,無需重複解析編譯。
UPDATE/INSERT/DELETE 結合 BEGIN TRAN / COMMIT / ROLLBACK 保證原子性EXECUTE 權限,隱藏資料表結構,防 SQL 注入CREATE PROCEDURE 程序名
@參數1 型別, @參數2 型別 ...
AS
BEGIN
-- SQL 陳述式
END
GO
CREATE PROCEDURE sp_AddStudent
@Name VARCHAR(20), @Sex CHAR(2), @Age INT
AS
INSERT INTO Student (Name, Sex, Age) VALUES (@Name, @Sex, @Age);
GO
CREATE PROCEDURE sp_UpdateStudent
@Name VARCHAR(20), @Sex CHAR(2), @Age INT, @ID INT
AS
UPDATE Student SET Name=@Name, Sex=@Sex, Age=@Age WHERE ID=@ID;
GO
CREATE PROCEDURE sp_DeleteStudent @ID INT
AS
DELETE FROM Student WHERE ID=@ID;
GO
CREATE PROCEDURE sp_GetStudents
@Page INT = 1, @PageSize INT = 20
AS
SELECT * FROM Student
ORDER BY ID
OFFSET (@Page-1)*@PageSize ROWS FETCH NEXT @PageSize ROWS ONLY;
GO
-- 位置參數
EXEC sp_AddStudent 'Tom', 'M', 20;
-- 命名參數(順序可互換)
EXEC sp_AddStudent @Name='Tom', @Age=20, @Sex='M';
OUTPUT 回傳標量值sp_executesql 應對靈活查詢條件TRY...CATCH 錯誤處理與事務回滾OPTION (RECOMPILE)sp_<動詞><實體>,如 sp_GetUserByIdSELECT *,明確列出欄位sys.dm_exec_procedure_stats 找出慢查詢