首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

MS SQL Server 基礎教程:建立預存程序完整指南 (Enterprise Manager 與 T-SQL 双軌教學)

     編輯:關於SqlServer

建立預存程序的三大構成要素

  1. 所有輸入參數與輸出參數
  2. 針對資料庫的操作陳述式 (含呼叫其他 SP)
  3. 回傳給呼叫端的狀態值 (成功/失敗)

方法一:Enterprise Manager 圖形化建立 (適合初學者)

  1. 啟動 Enterprise Manager,連線至目標伺服器
  2. 展開目標資料庫 → 右鍵 Stored Procedures → New Stored Procedure
  3. 輸入預存程序主體 (範本已含 CREATE PROCEDURE 框架)
  4. 點擊 Check Syntax 驗證語法
  5. 確定儲存
  6. 右鍵該 SP → All Tasks → Manage Permissions 設定執行權限

新增預存程序對話方塊

權限管理對話方塊

權限設定細節

方法二:CREATE PROCEDURE T-SQL 指令 (開發者慣用)

語法規則完整版


CREATE PROC[EDURE] procedure_name [; number]
    [ { @parameter data_type }
        [ VARYING ] [ = default ] [ OUTPUT ]
    ] [ ,...n ]
    [ WITH
        { RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION }
    ]
    [ FOR REPLICATION ]
AS
    sql_statement [ ...n ]

關鍵選項解析

選項用途
@parameter data_type定義參數名稱、資料類型、預設值、OUTPUT 方向
VARYING僅適用游標輸出參數,標示結果集結構可變
WITH RECOMPILE每次執行重新編譯,適用參數敏感度高、計畫不穩定場景
WITH ENCRYPTION加密定義文本,sp_helptext 與 EM 皆無法檢視 (安全性考量)
FOR REPLICATION標記為複寫用途,不可直接執行

實用範例:帶參數、輸出、錯誤處理


CREATE PROCEDURE usp_GetOrderSummary
    @CustomerID NCHAR(5),
    @OrderDateFrom DATETIME,
    @OrderDateTo DATETIME = NULL,  -- 預設值
    @TotalAmount MONEY OUTPUT      -- 輸出參數
WITH RECOMPILE
AS
BEGIN
    SET NOCOUNT ON;
    
    IF @OrderDateTo IS NULL SET @OrderDateTo = GETDATE();
    
    SELECT 
        OrderID, OrderDate, 
        SUBTOTAL = (SELECT SUM(UnitPrice * Quantity * (1-Discount)) 
                    FROM [Order Details] od 
                    WHERE od.OrderID = o.OrderID)
    FROM Orders o
    WHERE o.CustomerID = @CustomerID
      AND o.OrderDate BETWEEN @OrderDateFrom AND @OrderDateTo;
    
    SELECT @TotalAmount = SUM(UnitPrice * Quantity * (1-Discount))
    FROM [Order Details] od
    JOIN Orders o ON o.OrderID = od.OrderID
    WHERE o.CustomerID = @CustomerID
      AND o.OrderDate BETWEEN @OrderDateFrom AND @OrderDateTo;
    
    RETURN 0;  -- 成功狀態
END

建立時必須注意的限制

  • 單一批次中 CREATE PROCEDURE 不能與其他 SQL 陳述式混用
  • 資料庫擁有者 (dbo) 預設擁有建立權限,可授權他人
  • 命名必須符合識別碼規則 (首字母、長度 1-128)
  • 只能在**目前資料庫**建立屬於該資料庫的 SP
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved