SQL Server 中 for 循环的语法
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/6069024/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Syntax of for-loop in SQL Server
提问by Macho
What is the syntax of a for
loop in TSQL?
for
TSQL 中循环的语法是什么?
采纳答案by jams
T-SQL doesn't have a FOR
loop, it has a WHILE
loop
WHILE (Transact-SQL)
T-SQL 没有FOR
循环,它有一个WHILE
循环
WHILE (Transact-SQL)
WHILE Boolean_expression
BEGIN
END
回答by TcKs
There is no for-loop, only the while-loop:
没有 for 循环,只有 while 循环:
DECLARE @i int = 0
WHILE @i < 20
BEGIN
SET @i = @i + 1
/* do some work */
END
回答by Dan Cundy
Extra Info
额外信息
Just to add as no-one has posted an answer that includes how to actually iterate though a dataset inside a loop, you can use the keywords OFFSET FETCH.
只是为了补充,因为没有人发布了一个答案,其中包括如何在循环内实际迭代数据集,您可以使用关键字OFFSET FETCH。
Usage
用法
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
回答by kashmir
DECLARE @intFlag INT
SET @intFlag = 1
WHILE (@intFlag <=5)
BEGIN
PRINT @intFlag
SET @intFlag = @intFlag + 1
END
GO
回答by i00
How about this:
这个怎么样:
BEGIN
Do Something
END
GO 10
... of course you could put an incremental counter inside it if you need to count.
...当然,如果您需要计数,您可以在其中放置一个增量计数器。
回答by Somnath Muluk
For loop is not officially supported yet by SQL server. Already there is answeron achieving FORLoop's different ways. I am detailing answer on ways to achieve different types of loops in SQL server.
SQL 服务器尚未正式支持 For 循环。已经有关于实现FOR循环的不同方式的答案。我正在详细说明在 SQL Server 中实现不同类型循环的方法。
FOR Loop
FOR 循环
DECLARE @cnt INT = 0;
WHILE @cnt < 10
BEGIN
PRINT 'Inside FOR LOOP';
SET @cnt = @cnt + 1;
END;
PRINT 'Done FOR LOOP';
If you know, you need to complete first iteration of loop anyway, then you can try DO..WHILEor REPEAT..UNTILversion of SQL server.
如果您知道,无论如何您都需要完成循环的第一次迭代,那么您可以尝试使用DO..WHILE或REPEAT..UNTIL版本的 SQL 服务器。
DO..WHILE Loop
DO..WHILE 循环
DECLARE @X INT=1;
WAY: --> Here the DO statement
PRINT @X;
SET @X += 1;
IF @X<=10 GOTO WAY;
REPEAT..UNTIL Loop
REPEAT..UNTIL 循环
DECLARE @X INT = 1;
WAY: -- Here the REPEAT statement
PRINT @X;
SET @X += 1;
IFNOT(@X > 10) GOTO WAY;
回答by Ragul
Simple answer is NO !!
.
简单的答案是NO !!
。
There is no
FOR
in SQL, But you can useWHILE
orGOTO
to achieve the way how theFOR
will work.
FOR
在 SQL中没有,但是您可以使用WHILE
或GOTO
来实现将如何FOR
工作的方式。
WHILE :
尽管 :
DECLARE @a INT = 10
WHILE @a <= 20
BEGIN
PRINT @a
SET @a = @a + 1
END
GOTO :
去 :
DECLARE @a INT = 10
a:
PRINT @a
SET @a = @a + 1
IF @a < = 20
BEGIN
GOTO a
END
I always prefer WHILE
over GOTO
statement.
我总是喜欢WHILE
过度GOTO
陈述。
回答by Sameer
While Loop example in T-SQL which list current month's beginning to end date.
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;
回答by Mahesh Mitikiri
Try it, learn it:
尝试一下,学习一下:
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
With date:
与日期:
DECLARE @d DATE = '2019-11-01'
WHILE @d < GETDATE()
BEGIN
PRINT @d
SET @d = DATEADD(DAY,1,@d)
END
PRINT 'n'
PRINT @d