USE math;
GO
DECLARE @i INT = 1;
WHILE @i <= 100000
BEGIN
INSERT INTO Xzt (Chapter, Timu, Score, Difficulty, A, B, C, D, Answer, HasPic)
VALUES ('one', N'什麼顏色?', '2', N'難', N'紅', N'藍', N'綠', N'紫', 'A', 1);
SET @i += 1;
END;
| 錯誤現象 | 原因 | 修正 |
|---|---|---|
| Msg 170, Level 15, State 1, Line 7: '1' 附近有語法錯誤 | 缺少 BEGIN ... END 區塊,WHILE 只執行緊接的一行 | 加上 BEGIN ... END 包裹多行陳述式 |
| 執行極慢 / 記錄檔暴增 | 單筆 INSERT 產生大量交易記錄 | 分批次 (如每 5000 筆) COMMIT,或改用 BULK INSERT/BCP |
DECLARE @i INT = 1, @batch INT = 5000;
WHILE @i <= 100000
BEGIN
INSERT INTO Xzt (...) VALUES (...);
IF @i % @batch = 0
CHECKPOINT; -- 簡單復原模式下截斷記錄檔
SET @i += 1;
END;
INSERT ... SELECT ... FROM tally_table 避免迴圈。初學者易忽略 BEGIN...END 區塊,導致語法錯誤。養成「控制流必用區塊」習慣,並嘗試集合導向寫法,能大幅提升 T-SQL 開發效率與效能。