以下是一个SQL Server中WHILE循环的基本示例,用于批量更新数据:
DECLARE @i INT = 1;
WHILE @i <= 10
BEGIN
UPDATE YourTable SET Column1 = @i WHERE ID = @i;
SET @i = @i + 1;
END;
示例2:MySQL中使用存储过程实现循环
DELIMITER //
CREATE PROCEDURE LoopDemo()
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE x INT DEFAULT 1;
DECLARE cur CURSOR FOR SELECT id FROM users;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur;
read_loop: LOOP
FETCH cur INTO x;
IF done THEN
LEAVE read_loop;
END IF;
INSERT INTO temp VALUES(x);
END LOOP;
CLOSE cur;
END //
DELIMITER ;
PostgreSQL递归CTE循环示例
WITH RECURSIVE t(n) AS (
VALUES (1)
UNION ALL
SELECT n+1 FROM t WHERE n < 10
)
SELECT * FROM t;
SQL Server批量插入循环
DECLARE @counter INT = 0;
WHILE @counter < 100
BEGIN
INSERT INTO Numbers (Value) VALUES (@counter);
SET @counter = @counter + 1;
END;
MySQL WHILE循环删除重复数据
DELIMITER $$
CREATE PROCEDURE DeleteDuplicates()
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE dup_id INT;
DECLARE cur CURSOR FOR SELECT id FROM duplicates GROUP BY col1, col2 HAVING COUNT(*) > 1;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1;
OPEN cur;
del_loop: LOOP
FETCH cur INTO dup_id;
IF done THEN LEAVE del_loop; END IF;
DELETE FROM table1 WHERE id = dup_id LIMIT 1;
END LOOP;
CLOSE cur;
END$$
DELIMITER ;
Oracle PL/SQL FOR循环示例
BEGIN
FOR i IN 1..10 LOOP
INSERT INTO test_table (id, value) VALUES (i, 'Value ' || i);
END LOOP;
COMMIT;
END;
/
自动化处理技巧:使用循环生成序列
在SQL Server中:
DECLARE @StartDate DATE = '2023-01-01';
DECLARE @EndDate DATE = '2023-12-31';
DECLARE @CurrentDate DATE = @StartDate;
WHILE @CurrentDate <= @EndDate
BEGIN
INSERT INTO DateTable (DateValue) VALUES (@CurrentDate);
SET @CurrentDate = DATEADD(DAY, 1, @CurrentDate);
END;
FAQ
Q: SQL中哪种循环最常用?
A: WHILE循环在SQL Server中很常见,MySQL用存储过程CURSOR,PostgreSQL用递归CTE。
Q: 循环会不会影响性能?
A: 是的,循环处理大数据时性能差,优先用SET操作或MERGE。
Q: 如何停止循环?
A: 用BREAK(SQL Server)或LEAVE(MySQL/Oracle)退出。
Q: 可以嵌套循环吗?
A: 可以,但要小心无限循环,用计数器控制。
Q: 循环适合什么场景?
A: 批量小数据处理、生成测试数据、简单自动化任务。