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

SQL WHILE 迴圈批次新增 10 萬筆測試資料實戰

     編輯:關於SqlServer

完整腳本

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

進階優化版:分批次 Commit

DECLARE @i INT = 1, @batch INT = 5000;
WHILE @i <= 100000
BEGIN
    INSERT INTO Xzt (...) VALUES (...);
    IF @i % @batch = 0
        CHECKPOINT;  -- 簡單復原模式下截斷記錄檔
    SET @i += 1;
END;

更高效替代方案

  • SET BASED 寫法:INSERT ... SELECT ... FROM tally_table 避免迴圈。
  • BCP / BULK INSERT:從文字檔匯入,速度快 10-100 倍。
  • Table-Valued Parameter (TVP):應用層批次傳遞資料表參數。

心得總結

初學者易忽略 BEGIN...END 區塊,導致語法錯誤。養成「控制流必用區塊」習慣,並嘗試集合導向寫法,能大幅提升 T-SQL 開發效率與效能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved