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

SQL Server 控制流程語句完整指南:BEGIN...END、IF、WHILE、CASE、GOTO、WAITFOR

     編輯:關於SqlServer

1. 陳述式區塊:BEGIN ... END

BEGIN
    -- 多條 T-SQL 陳述式視為單一單位
    SELECT 1;
    SELECT 2;
END

常用於 IF/WHILE 內包含多行邏輯,可巢狀。

2. 條件判斷:IF ... ELSE

IF @score >= 60
    PRINT '及格';
ELSE
    PRINT '不及格';

多行必須用 BEGIN...END 包裹。

3. 存在性檢測:IF EXISTS / IF NOT EXISTS

IF EXISTS (SELECT 1 FROM sys.tables WHERE name = 'Users')
    DROP TABLE Users;

IF NOT EXISTS (SELECT 1 FROM sys.databases WHERE name = 'TestDB')
    CREATE DATABASE TestDB;

比 COUNT(*) > 0 效率高:找到第一筆即停止。

4. 多重分支:CASE ... WHEN

格式一:簡單 CASE

CASE @grade
    WHEN 'A' THEN '優'
    WHEN 'B' THEN '良'
    ELSE '需加強'
END

格式二:搜尋 CASE

CASE 
    WHEN @score >= 90 THEN 'A'
    WHEN @score >= 80 THEN 'B'
    WHEN @score >= 60 THEN 'C'
    ELSE 'D'
END

避免多層 IF 巢狀,可直接用於 SELECT/SET/WHERE/ORDER BY。

5. 迴圈:WHILE

DECLARE @i INT = 1;
WHILE @i <= 10
BEGIN
    PRINT @i;
    SET @i += 1;
    IF @i = 5 BREAK;      -- 跳出迴圈
    IF @i = 3 CONTINUE;   -- 跳過本輪剩餘
END

6. 無條件跳轉:GOTO

GOTO ErrorHandler;
-- ...
ErrorHandler:
    PRINT '錯誤處理';

標籤需以冒號結尾,慎用以免產生義大利麵條代碼。

7. 返回:RETURN

CREATE PROC TestReturn @val INT
AS
BEGIN
    IF @val < 0 RETURN -1;  -- 結束程序,返回 -1
    SELECT @val * 2;
    RETURN 0;
END

可從批次、SP、觸發器無條件退出,後續碼不執行。

8. 延遲執行:WAITFOR

-- 等待 10 秒
WAITFOR DELAY '00:00:10';
PRINT '10 秒後執行';

-- 等待至指定時間
WAITFOR TIME '23:59:59';
PRINT '跨年倒數';

時間格式 HH:MM:SS,最大延遲 24 小時,無法指定日期。

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