TableAdapter 精靈可自動產生 Stored Procedure 對應 Select/Insert/Update/Delete。本文介紹 SP 基礎觀念、精靈操作流程、安全性/維護性優缺點比較。
CREATE PROCEDURE GetProductsByCategoryID @CategoryID int AS SELECT ... WHERE CategoryID = @CategoryIDEXEC GetProductsByCategoryID 1SP 內多條命令不自動在交易中,需顯式控制:
CREATE PROCEDURE DeleteCategory
@CategoryID int
AS
BEGIN TRANSACTION
DELETE FROM Products WHERE CategoryID = @CategoryID;
DELETE FROM Categories WHERE CategoryID = @CategoryID;
COMMIT TRANSACTION;
| 面向 | Stored Procedure | Ad-hoc SQL |
|---|---|---|
| 安全性 | 授權執行 SP,不需直接表權限 | 需資料表直接權限 |
| 維護性 | 集中管理、DBA 可獨立調優 | 分散在應用程式代碼 |
| 效能 | 預編譯、計畫快取、參數嗅探 | 每次編譯、計畫可能不重用 |
| 彈性 | 修改需部署、版本控制較複雜 | 代碼即時修改、重新編譯即可 |
| 除錯 | VS 專業版支援 SP 偵錯 | 應用程式偵錯器即可 |
參考:Rob Howard - Don't Use Stored Procedures Yet?、Frans Bouma - Stored Procedures are Bad, M'Kay?
TableAdapter 精靈自動建立 SP 大幅降低導入門檻。選擇 SP 或 Ad-hoc SQL 應視團隊規模、DBA 參與度、部署流程、效能需求綜合決定。