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

SQL Server T-SQL 編程入門:變量、流程控制與實戰範例全攻略

     編輯:關於SqlServer

1. 變量體系

局部變量


DECLARE @name VARCHAR(8), @seat INT;
SET @name = '李文才';          -- 標準賦值
SELECT @name = sUserName FROM student WHERE ID = 1;  -- 查詢賦值(單行)
-- 用法
SELECT * FROM student WHERE sUserName = @name;
SELECT * FROM student WHERE stuseat IN (@seat-1, @seat+1);

全局變量(系統函數)

變量含義
@@ERROR最後語句錯誤號
@@IDENTITY最後插入的標識值(跨觸發器)
@@ROWCOUNT影響行數
@@TRANCOUNT當前事務嵌套層級
@@VERSION版本信息

注意: 現代開發優先使用 SCOPE_IDENTITY() 替代 @@IDENTITY,避免觸發器干擾。

2. 流程控制語句

IF...ELSE


DECLARE @avgScore FLOAT;
SELECT @avgScore = AVG(writtenexam) FROM stumarks;
IF @avgScore > 70
BEGIN
    PRINT '優秀';
    SELECT TOP 3 * FROM stumarks ORDER BY writtenexam DESC;
END
ELSE
BEGIN
    PRINT '需加強';
    SELECT TOP 3 * FROM stumarks ORDER BY writtenexam;
END

WHILE 循環


DECLARE @cnt INT = 1;
WHILE @cnt <= 10
BEGIN
    PRINT '循環 ' + CAST(@cnt AS VARCHAR);
    SET @cnt += 1;
    IF @cnt = 5 BREAK;   -- 跳出循環
    IF @cnt = 3 CONTINUE; -- 跳過本次剩餘
END

CASE 表達式(兩種形式)


-- 簡單 CASE
SELECT grade = CASE score
    WHEN 100 THEN 'A+'
    WHEN 90 THEN 'A'
    ELSE 'B'
END FROM exams;

-- 搜索 CASE(靈活條件)
SELECT level = CASE
    WHEN score >= 90 THEN '優'
    WHEN score >= 70 THEN '良'
    WHEN score >= 60 THEN '及格'
    ELSE '不及格'
END FROM exams;

3. 實戰範例:動態加分邏輯


-- 所有不及格學生循環加 2 分,直到全及格
WHILE 1 = 1
BEGIN
    DECLARE @failCount INT;
    SELECT @failCount = COUNT(*) FROM stumarks WHERE writtenexam < 60;
    IF @failCount = 0 BREAK;
    UPDATE stumarks SET writtenexam += 2 WHERE writtenexam < 60;
END
PRINT '加分完成';
SELECT * FROM stumarks;

4. 進階技巧與避坑

  • SET vs SELECT 賦值: SET 標準、單值;SELECT 可多變量、查詢無行時保持原值(SET 置 NULL)。
  • 變量作用域: 批次級,GO 會重置。
  • 避免游標: 集合操作(JOIN、窗口函數、CTE)性能遠優於逐行游標。
  • 錯誤處理: SQL 2005+ 必須用 TRY...CATCH,勿依賴 @@ERROR 檢查。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved