DECLARE @a INT = 1;
WHILE @a < 25
BEGIN
INSERT INTO demotable (id, item1, item2) VALUES (@a, 'abc', '123');
SET @a = @a + 1;
END;
可直接在 SSMS / sqlcmd 執行,無需建立物件。
MySQL 不支援獨立的腳本塊變數宣告與流程控制,**必須在儲存過程/函數/觸發器內**使用 DECLARE、WHILE。
DELIMITER //
CREATE PROCEDURE `insert_demo`()
BEGIN
DECLARE i INT DEFAULT 1;
WHILE i < 100 DO
INSERT INTO demotable (id, item1, item2) VALUES (i, '測試試題', '0');
SET i = i + 1;
END WHILE;
END //
DELIMITER ;
-- 呼叫執行
CALL insert_demo();
-- 用完可刪除
DROP PROCEDURE IF EXISTS insert_demo;
| 特性 | SQL Server | MySQL |
|---|---|---|
| 變數宣告 | DECLARE @var TYPE | DECLARE var TYPE(無 @) |
| 流程控制位置 | 批次腳本任意處 | 僅限 Routine 內部 |
| 分隔符 | GO / ; | DELIMITER // 避免 ; 衝突 |
| 迴圈語法 | WHILE ... BEGIN ... END | WHILE ... DO ... END WHILE |
WITH RECURSIVE nums AS (
SELECT 1 AS n
UNION ALL
SELECT n+1 FROM nums WHERE n < 100
)
INSERT INTO demotable (id, item1, item2)
SELECT n, '測試試題', '0' FROM nums;
無需建立儲存過程,單條 SQL 完成,效能更優。
LOAD DATA INFILE 導入預生成 CSV,比迴圈 INSERT 快 10~100 倍。dbForge Data Generator、Mockaroo、Percona tpcc-mysql。