在数据库编程中,经常需要执行重复的任务。SQL Server提供了多种循环控制语句来帮助实现这些任务。本文将介绍如何在 SQL Server 中使用存储过程和循环控制语句,如 WHILE、BREAK 和 CONTINUE。
WHILE 语句用于重复执行一个代码块,直到条件不再满足。以下是一个使用 WHILE 循环创建临时表并插入数据的例子。
DECLARE @myTable TABLE(WeekNumber INT, DateStarting SMALLDATETIME);
DECLARE @n INT = 0;
DECLARE @firstWeek SMALLDATETIME = '12/31/2017';
WHILE @n <= 52
BEGIN
INSERT INTO @myTable VALUES (@n, DATEADD(wk, @n, @firstWeek));
SELECT @n = @n + 1;
END;
SELECT WeekNumber, DateStarting FROM @myTable;
在这个例子中,使用 DATEADD 函数来计算每周的开始日期。WHILE 循环会一直执行,直到变量 @n 大于 52。每次循环,@n 都会增加 1,以确保循环最终会结束。
BREAK 语句用于强制退出 WHILE 循环。以下是一个使用 BREAK 语句的例子。
DECLARE @myTable TABLE(WeekNumber INT, DateStarting SMALLDATETIME);
DECLARE @n INT = 0;
DECLARE @firstWeek SMALLDATETIME = '12/31/2017';
WHILE @n > -1
BEGIN
INSERT INTO @myTable VALUES (@n, DATEADD(wk, @n, @firstWeek));
SELECT @n = @n + 1;
IF @n > 52 BREAK;
END;
在这个例子中,WHILE 循环的条件总是为 TRUE,因为 @n 总是大于或等于 0。IF 语句检查结束条件,如果为 TRUE,则执行 BREAK 语句,退出循环。
CONTINUE 语句用于重置 WHILE 循环的代码块。以下是一个使用 CONTINUE 语句的例子。
DECLARE @myTable TABLE(WeekNumber INT, DateStarting SMALLDATETIME);
DECLARE @n INT = 0;
DECLARE @firstWeek SMALLDATETIME = '12/31/2017';
WHILE @n > -1
BEGIN
INSERT INTO @myTable VALUES (@n, DATEADD(wk, @n, @firstWeek));
SELECT @n = @n + 1;
IF @n > 52 BREAK;
ELSE CONTINUE;
PRINT 'I Never get executed';
END;