TSQL 中
for
循环的语法是什么?
没有for循环,只有while循环:
DECLARE @i int = 0
WHILE @i < 20
BEGIN
SET @i = @i + 1
/* do some work */
END
只是补充一下,因为没有人发布了包含如何在循环内实际迭代数据集的答案。您可以使用关键字 OFFSET FETCH。
使用方法
DECLARE @i INT = 0;
SELECT @count= Count(*) FROM {TABLE}
WHILE @i <= @count
BEGIN
SELECT * FROM {TABLE}
ORDER BY {COLUMN}
OFFSET @i ROWS
FETCH NEXT 1 ROWS ONLY
SET @i = @i + 1;
END
DECLARE @intFlag INT
SET @intFlag = 1
WHILE (@intFlag <=5)
BEGIN
PRINT @intFlag
SET @intFlag = @intFlag + 1
END
GO
SQL Server 尚未正式支持 For 循环。已经有关于实现 FOR 循环的不同方式的 answer。我正在详细回答如何在 SQL Server 中实现不同类型的循环。
DECLARE @cnt INT = 0;
WHILE @cnt < 10
BEGIN
PRINT 'Inside FOR LOOP';
SET @cnt = @cnt + 1;
END;
PRINT 'Done FOR LOOP';
如果您知道,无论如何您都需要完成循环的第一次迭代,那么您可以尝试 SQL Server 的 DO..WHILE 或 REPEAT..UNTIL 版本。
DECLARE @X INT=1;
WAY: --> Here the DO statement
PRINT @X;
SET @X += 1;
IF @X<=10 GOTO WAY;
DECLARE @X INT = 1;
WAY: -- Here the REPEAT statement
PRINT @X;
SET @X += 1;
IFNOT(@X > 10) GOTO WAY;
简单的答案是
NO !!
。
SQL中没有
,但是可以使用FOR
或WHILE
来实现GOTO
的工作方式。FOR
同时:
DECLARE @a INT = 10
WHILE @a <= 20
BEGIN
PRINT @a
SET @a = @a + 1
END
转到:
DECLARE @a INT = 10
a:
PRINT @a
SET @a = @a + 1
IF @a < = 20
BEGIN
GOTO a
END
我总是更喜欢
WHILE
而不是GOTO
声明。
这个怎么样:
BEGIN
Do Something
END
GO 10
...当然如果你需要计数的话你可以在里面放一个增量计数器。
旧线程但仍在出现,我想我会为那些需要的人提供一个“FOREACH”解决方案。
DECLARE @myValue nvarchar(45);
DECLARE myCursor CURSOR FOR
SELECT [x]
FROM (Values ('Value1'),('Value2'),('Value3'),('Value4'))
as MyTable(x);
OPEN myCursor;
FETCH NEXT FROM myCursor INTO @myValue;
While (@@FETCH_STATUS = 0)
BEGIN
PRINT @myValue
FETCH NEXT FROM myCursor INTO @myValue;
END
CLOSE myCursor;
DEALLOCATE myCursor;
我应该郑重声明,递归在 SQL 世界中是不受欢迎的。有充分的理由——这可能对性能非常不利。尽管如此,对于维护/离线/批量/临时/测试/等操作,我经常使用这种方法。
尝试一下,学习一下:
DECLARE @r INT = 5
DECLARE @i INT = 0
DECLARE @F varchar(max) = ''
WHILE @i < @r
BEGIN
DECLARE @j INT = 0
DECLARE @o varchar(max) = ''
WHILE @j < @r - @i - 1
BEGIN
SET @o = @o + ' '
SET @j += 1
END
DECLARE @k INT = 0
WHILE @k < @i + 1
BEGIN
SET @o = @o + ' *' -- '*'
SET @k += 1
END
SET @i += 1
SET @F = @F + @o + CHAR(13)
END
PRINT @F
有日期:
DECLARE @d DATE = '2019-11-01'
WHILE @d < GETDATE()
BEGIN
PRINT @d
SET @d = DATEADD(DAY,1,@d)
END
PRINT 'n'
PRINT @d
T-SQL 中的 While 循环示例,列出当前月份的开始到结束日期。
DECLARE @Today DATE= GETDATE() ,
@StartOfMonth DATE ,
@EndOfMonth DATE;
DECLARE @DateList TABLE ( DateLabel VARCHAR(10) );
SET @EndOfMonth = EOMONTH(GETDATE());
SET @StartOfMonth = DATEFROMPARTS(YEAR(@Today), MONTH(@Today), 1);
WHILE @StartOfMonth <= @EndOfMonth
BEGIN
INSERT INTO @DateList
VALUES ( @StartOfMonth );
SET @StartOfMonth = DATEADD(DAY, 1, @StartOfMonth);
END;
SELECT DateLabel
FROM @DateList;
此查询是一个 MySQL 过程,将显示一个表,该表显示从 0 到给定范围的自然数之和。
语法结构为:
开始
声明 var 数据类型;
设置 var = 某事
NAME_OF_YOUR_LOOP:循环
价值更新
条件(防止无限循环所必需的)
结束循环 NAME_OF_YOUR_LOOP
结束
DELIMITER $$
CREATE PROCEDURE SUM_OF_NATURAL_NUMS(IN maxrange INT)
BEGIN
DECLARE r INT;
DECLARE s INT;
SET r = 1;
SET s = 0;
LOOP_LABEL: LOOP
if r = maxrange THEN
LEAVE LOOP_LABEL; -- terminate the loop
END IF;
SET r = r + 1;
SET s = s + r;
END LOOP LOOP_LABEL;
SELECT s;
END $$
DELIMITER $$
CALL SUM_OF_NATURAL_NUMS(100);