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,避免觸發器干擾。
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
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
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;
-- 所有不及格學生循環加 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;
TRY...CATCH,勿依賴 @@ERROR 檢查。