存儲過程是一組為完成特定功能的 SQL 語句集,經編譯後存儲在數據庫中。用戶通過名稱+參數調用,數據庫引擎直接執行預編譯計劃。
master 庫,前綴 sp_,封裝系統表查詢,供 DBA 管理實例。usp_ 或業務前綴。| 過程 | 用途 |
|---|---|
sp_databases | 列出所有數據庫 |
sp_tables | 列出當前庫所有表/視圖 |
sp_columns 'table' | 查看表列定義 |
sp_helpindex 'table' | 查看索引 |
sp_helpconstraint 'table' | 查看約束 |
sp_stored_procedures | 列出所有存儲過程 |
sp_helptext 'sp_name' | 查看過程定義文本 |
sp_rename 'old','new' | 重命名表/列/索引 |
sp_renamedb 'old','new' | 重命名數據庫 |
sp_defaultdb 'login','db' | 修改登錄默認庫 |
sp_helpdb / sp_helpdb 'db' | 數據庫信息總覽/詳情 |
EXECUTE 權限,不給表直連權限。CREATE PROC[EDURE] 存儲過程名
@參數1 數據類型 = 默認值, -- 輸入參數,可選默認
@參數2 數據類型 OUTPUT -- 輸出參數
AS
BEGIN
SQL語句塊
END
GO
CREATE PROCEDURE UserLogin
@name VARCHAR(20),
@password VARCHAR(20)
AS
BEGIN
SELECT * FROM userinfo WHERE userName = @name AND userPass = @password;
END
GO
-- 位置參數
EXEC UserLogin 'admin', 'admin';
-- 命名參數(推薦,順序無關、可讀性強)
EXEC UserLogin @name='admin', @password='admin';
DROP PROCEDURE UserLogin;
using (var conn = new SqlConnection(connStr))
using (var cmd = new SqlCommand("UserLogin", conn))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@name", txtUser.Text);
cmd.Parameters.AddWithValue("@password", txtPwd.Text);
conn.Open();
using (var reader = cmd.ExecuteReader())
{
if (reader.Read()) { /* 登錄成功 */ }
else { /* 失敗 */ }
}
}
存儲過程是數據庫端業務邊界的第一道防線。掌握「創建→參數化調用→權限控制→版本管理」閉環,是從寫 SQL 走向數據庫工程師的必經之路。