良好的註解習慣讓複雜 SQL 可讀、可維護;條件控制語句讓腳本具備動態邏輯。本文詳細說明 SQL Server (T-SQL) 的註解語法與 IF...ELSE、BEGIN...END 區塊用法。
| 類型 | 語法 | 範圍 | 範例 |
|---|---|---|---|
| 單行註解 | -- | 從 -- 到該行結尾 | SELECT GETDATE() -- 取得目前日期時間 |
| 多行註解 | /* ... */ | 跨行,可嵌套(需相容性層級 130+) | /* 此區塊計算月銷售總額 */ SELECT SUM(Amount) FROM Sales WHERE SaleDate >= '2024-01-01'; |
/* ... */ 包裹整段,除錯時快速切換。-- 或 /*,以免被誤判為註解開頭。IF Boolean_expression
{ sql_statement | statement_block }
[ ELSE
{ sql_statement | statement_block } ]
IF 後直接接陳述式,加 THEN 會報錯。BEGIN...END 明確界定層級。-- 簡單 IF
IF (SELECT COUNT(*) FROM Authors) > 10
PRINT N'作者超過 10 位!';
-- 區塊 IF...ELSE
IF DATENAME(MONTH, GETDATE()) = N'July'
BEGIN
PRINT N'現在是七月。';
PRINT N'祝您七月愉快!';
END
ELSE
BEGIN
PRINT N'現在不是七月。';
END;
-- 巢狀:依銷售額給予不同折扣
DECLARE @Sales MONEY = 15000;
IF @Sales >= 10000
BEGIN
IF @Sales >= 20000
PRINT N'折扣 15%';
ELSE
PRINT N'折扣 10%';
END
ELSE
PRINT N'無折扣';
| 語句 | 用途 | 範例 |
|---|---|---|
BEGIN...END | 定義陳述式區塊 | 配合 IF/WHILE 使用 |
WHILE | 迴圈 | WHILE @i < 10 BEGIN ... SET @i += 1; END |
BREAK / CONTINUE | 跳出/跳過本次迴圈 | 在 WHILE 區塊內使用 |
RETURN | 結束預存程序/批次,回傳整數狀態碼 | IF @Err <> 0 RETURN -1; |
GOTO label | 無條件跳轉(慎用) | GOTO ErrorHandler; |
TRY...CATCH | 結構化錯誤處理 (SQL 2005+) | 捕捉執行錯誤、記錄、回滾交易 |
THROW | 重新拋出/自訂錯誤 (SQL 2012+) | THROW 50001, N'自訂錯誤', 1; |
IF/WHILE 永遠搭配 BEGIN...END,即使只有一行。TRY...CATCH,配合 XACT_STATE() 判斷交易狀態決定回滾/提交。GOTO,改用結構化邏輯。@PascalCase 或 @camelCase,統一團隊風格。註解與控制流程是 SQL 程式可讀性與健壯性的基石,養成好習慣,團隊協作與長期維護將事半功倍。