首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

MSSQL存儲過程實現1到N整數求和

     編輯:程式設計綜合問答

需求

輸入參數 N(1~100),輸出 1+2+...+N 的和。

存儲過程代碼

CREATE PROCEDURE dbo.Sum1ToN
    @N INT,
    @Sum INT OUTPUT
AS
BEGIN
    SET NOCOUNT ON;
    -- 參數校驗
    IF @N < 1 OR @N > 100
    BEGIN
        RAISERROR('參數 N 必須在 1 到 100 之間', 16, 1);
        RETURN -1;
    END

    -- 方法一:迴圈累加(教學演示)
    DECLARE @i INT = 1, @total INT = 0;
    WHILE @i <= @N
    BEGIN
        SET @total += @i;
        SET @i += 1;
    END
    SET @Sum = @total;

    -- 方法二:高斯公式(生產推薦,O(1))
    -- SET @Sum = @N * (@N + 1) / 2;

    -- 返回結果
    PRINT '1 到 ' + CAST(@N AS VARCHAR) + ' 的和為: ' + CAST(@Sum AS VARCHAR);
    RETURN 0;
END

調用示例

DECLARE @Result INT;
EXEC dbo.Sum1ToN @N = 10, @Sum = @Result OUTPUT;
PRINT '輸出參數 @Result = ' + CAST(@Result AS VARCHAR);

關鍵點解析

要點說明
`@Sum INT OUTPUT`聲明輸出參數,調用時需 `DECLARE` 變量並加 `OUTPUT` 關鍵字
`SET NOCOUNT ON`禁止返回「受影響行數」干擾客戶端結果集解析
參數校驗業務邊界防護,拋出用戶友好錯誤
高斯公式`N*(N+1)/2` 避免迴圈,效能極高,N=100 時差異微小但習慣重要
`PRINT` 訊息便於 SSMS 直接運行查看,生產環境可改為 `SELECT @Sum AS Result`

擴展:遞歸 CTE 寫法(SQL Server 2008+)

CREATE PROCEDURE dbo.Sum1ToN_CTE
    @N INT,
    @Sum INT OUTPUT
AS
BEGIN
    ;WITH nums AS (
        SELECT 1 AS n
        UNION ALL
        SELECT n + 1 FROM nums WHERE n < @N
    )
    SELECT @Sum = SUM(n) FROM nums
    OPTION (MAXRECURSION 100);  -- 防止無限遞歸
END

最佳實踐

  1. **優先使用數學公式** `N*(N+1)/2`,簡潔高效無邊界風險。
  2. **輸出參數**配合 `RETURN 0/錯誤碼` 區分業務成功/失敗。
  3. **測試邊界**:N=1, N=100, N=0, N=101, N=-5。
  4. **權限**:`GRANT EXECUTE ON dbo.Sum1ToN TO [AppUser];`

掌握「參數校驗 → 核心邏輯(公式優先) → 輸出賦值 → 友好提示」這一存儲過程標準結構,可應對絕大多數簡單計算類需求。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved