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

SQL 存儲過程入門基礎(三):流程控制 IF/ELSE、WHILE、CASE 實戰模板

     編輯:關於SqlServer

流程控制三板斧

T-SQL 無 FOR 循環,核心結構只有 IF/ELSE、WHILE、CASE,配合 BEGIN...END 塊即可覆蓋 99% 業務邏輯。

1. IF / ELSE / ELSE IF

IF 條件
BEGIN
    -- 語句塊
END
ELSE IF 條件
BEGIN
    -- 語句塊
END
ELSE
BEGIN
    -- 語句塊
END

示例:分級打印

DECLARE @id INT = 5;
IF @id = 1
    PRINT 'right';
ELSE IF @id = 0
    PRINT 'error';
ELSE
    PRINT 'default';  -- 輸出 default

建議始終加 BEGIN/END,避免單語句陷阱,增強可讀性。

2. WHILE 循環

WHILE 條件
BEGIN
    -- 循環體
    -- 必須有讓條件最終為假的邏輯(如計數器遞增)
END

示例:1 到 100 求和

DECLARE @i INT = 0, @sum INT = 0;
WHILE @i <= 100
BEGIN
    SET @i = @i + 1;
    SET @sum = @sum + @i;
END
PRINT @sum;  -- 5050

3. CASE 表達式(簡單/搜尋兩種形式)

搜尋式 CASE(最常用)

DECLARE @ret INT, @var VARCHAR(10) = 'A';
SELECT @ret = CASE
    WHEN @var = 'A' THEN 0
    WHEN @var = 'B' THEN 1
    WHEN @var = 'C' THEN 2
    WHEN @var = 'D' THEN 3
    ELSE -1
END;
PRINT @ret;  -- 0

簡單式 CASE(等值匹配)

SELECT @ret = CASE @var
    WHEN 'A' THEN 0
    WHEN 'B' THEN 1
    ELSE -1
END;

嵌套與組合實戰

-- WHILE 中嵌套 IF/CASE
DECLARE @i INT = 1, @evenSum INT = 0, @oddSum INT = 0;
WHILE @i <= 10
BEGIN
    SET @evenSum += CASE WHEN @i % 2 = 0 THEN @i ELSE 0 END;
    SET @oddSum  += CASE WHEN @i % 2 = 1 THEN @i ELSE 0 END;
    SET @i += 1;
END
PRINT '偶數和:' + CAST(@evenSum AS VARCHAR) + ' 奇數和:' + CAST(@oddSum AS VARCHAR);
-- 偶數和:30 奇數和:25

常見坑點

  • 無限循環:忘記更新循環變量,導致服務器掛起。
  • IF 後無 BEGIN/END 卻寫多句:只有第一句屬於 IF 體。
  • CASE 返回類型不一致:所有分支返回類型必須兼容(按優先級隱式轉換)。

結語

掌握 IF/WHILE/CASE,配合變量、參數、錯誤處理,即可在存儲過程中實現複雜業務流程。下一步建議學習 TRY...CATCH、THROW、事務控制,構建生產級健壯過程。

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