T-SQL 無 FOR 循環,核心結構只有 IF/ELSE、WHILE、CASE,配合 BEGIN...END 塊即可覆蓋 99% 業務邏輯。
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,避免單語句陷阱,增強可讀性。
WHILE 條件
BEGIN
-- 循環體
-- 必須有讓條件最終為假的邏輯(如計數器遞增)
END
DECLARE @i INT = 0, @sum INT = 0;
WHILE @i <= 100
BEGIN
SET @i = @i + 1;
SET @sum = @sum + @i;
END
PRINT @sum; -- 5050
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
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、事務控制,構建生產級健壯過程。