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

T-SQL 流程控制完整指南:IF、BEGIN...END、CASE、WHILE、WAITFOR

     編輯:關於SqlServer

Transact-SQL 流程控制命令深度解析

T-SQL 提供豐富的流程控制結構,支援條件判斷、迴圈控制、程式區塊定義與等待機制,功能與一般程式語言相似。本文系統整理 IF...ELSE、BEGIN...END、CASE、WHILE...CONTINUE...BREAK、WAITFOR 等核心控制命令的語法、嵌套規則與實戰範例。

4.6.1 IF...ELSE 條件判斷

語法結構:

IF <條件運算式>
    <命令列或程式區塊>
[ELSE [條件運算式]
    <命令列或程式區塊>]
  • 條件運算式結果必須為邏輯值 TRUE/FALSE
  • ELSE 子句為選用
  • 未使用程式區塊時,IF/ELSE 僅執行單一命令
  • 支援嵌套,最多 32 層

範例 4-9:多層條件判斷

DECLARE @x INT, @y INT, @z INT
SELECT @x=1, @y=2, @z=3
IF @x > @y
    PRINT 'x>y'
ELSE IF @y > @z
    PRINT 'y>z'
ELSE
    PRINT 'z>y'

執行結果: z>y

4.6.2 BEGIN...END 程式區塊定義

語法:

BEGIN
    <命令列或程式區塊>
END

將多條陳述式視為單一執行單元,常搭配 IF...ELSE 使用。支援嵌套定義多層程式區塊。

4.6.3 CASE 條件運算式

兩種語法格式:

簡單 CASE 運算式

CASE <運算式>
    WHEN <運算式> THEN <運算式>
    ...
    [ELSE <運算式>]
END

搜尋 CASE 運算式

CASE
    WHEN <條件運算式> THEN <運算式>
    ...
    [ELSE <運算式>]
END

可嵌入 SQL 命令中。執行時僅執行第一個符合條件的分支。

範例 4-10:員工薪資調整

USE pangu
UPDATE employee
SET e_wage = CASE
    WHEN job_level = '1' THEN e_wage * 1.08
    WHEN job_level = '2' THEN e_wage * 1.07
    WHEN job_level = '3' THEN e_wage * 1.06
    ELSE e_wage * 1.05
END

4.6.4 WHILE...CONTINUE...BREAK 迴圈控制

語法:

WHILE <條件運算式>
BEGIN
    <命令列或程式區塊>
    [BREAK]
    [CONTINUE]
    [<命令列或程式區塊>]
END
  • WHILE:條件成立時重複執行
  • CONTINUE:跳過後續陳述式,回到迴圈開頭
  • BREAK:完全跳出迴圈
  • 支援嵌套

範例 4-11:雙層迴圈列印乘法表

DECLARE @x INT, @y INT, @c INT
SELECT @x = 1, @y = 1
WHILE @x < 3
BEGIN
    PRINT @x
    WHILE @y < 3
    BEGIN
        SELECT @c = 100 * @x + @y
        PRINT @c
        SELECT @y = @y + 1
    END
    SELECT @x = @x + 1
    SELECT @y = 1
END

執行結果:

1
101
102
2
201
202

4.6.5 WAITFOR 等待機制

語法:WAITFOR {DELAY '時間' | TIME '時間' | ERROREXIT | PROCESSEXIT | MIRROREXIT}

  • DELAY:延遲指定時間間隔
  • TIME:等待至指定時間點
  • ERROREXIT/PROCESSEXIT/MIRROREXIT:錯誤/處理序/鏡像退出等待

最佳實務建議

  • 複雜邏輯務必使用 BEGIN...END 明確界定區塊範圍
  • WHILE 迴圈必須確保有明確的跳出條件,避免無限迴圈
  • CASE 運算式優於多層 IF...ELSE,可讀性與效能更佳
  • WAITFOR DELAY 適用於批次作業排程間隔控制
  • 嵌套層數雖支援 32 層,建議控制在 3-4 層以內以利維護
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved