SQL Server中for循环的语法

Mac*_*cho 220 sql t-sql sql-server syntax loops

forTSQL中循环的语法是什么?

TcK*_*cKs 345

没有for循环,只有while循环:

DECLARE @i int = 0

WHILE @i < 20
BEGIN
    SET @i = @i + 1
    /* do some work */
END
Run Code Online (Sandbox Code Playgroud)

  • 请注意,如果您打算在循环中使用索引,您可能希望增加最后一个而不是第一个,具体取决于您的用例. (19认同)
  • 是的,但这对旧的SQL Server无效(至少在2005年没有). (7认同)
  • 另请注意,纯SQL中不支持局部变量的默认值.因此,在循环之前需要单独的`SET @i = 0`. (3认同)

jam*_*ams 200

T-SQL没有FOR循环,它有一个WHILE循环
WHILE(Transact-SQL)

WHILE Boolean_expression
BEGIN

END
Run Code Online (Sandbox Code Playgroud)

  • JOIN(和set操作)应优先于SQL中的循环结构. (8认同)
  • 压力没有限制(特别是那些对SQL不熟悉的人),Damien说:*"与你习惯的语言相比,SQL是一种非常不同的语言.它专注于什么,而不是如何.你告诉SQL Server你想要什么结果,并让它弄清楚如何产生答案."* (6认同)

小智 28

DECLARE @intFlag INT
SET @intFlag = 1
WHILE (@intFlag <=5) 
BEGIN
    PRINT @intFlag
    SET @intFlag = @intFlag + 1
END
GO
Run Code Online (Sandbox Code Playgroud)

  • 这是不言自明的. (18认同)
  • 欢迎来到Stack Overflow!您是否会考虑添加一些叙述来解释为什么这段代码有效,以及是什么使它成为问题的答案?这对提出问题的人以及其他任何人来说非常有帮助. (13认同)
  • 这怎么不自我解释?我有同样的问题,我马上理解了答案. (4认同)
  • 除了命名约定之外,这个答案与@TcKs 有何不同? (3认同)

Dan*_*ndy 27

额外信息

只是添加为没有人发布了一个答案,其中包括如何实际迭代循环内的数据集,您可以使用关键字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
Run Code Online (Sandbox Code Playgroud)

  • 这不是一遍又一遍地执行选择吗?特别是如果它是一个连接并且不能每次都转到特定的行号? (3认同)
  • 替代使用游标的不错选择。 (2认同)

小智 7

这个怎么样:

BEGIN
   Do Something
END
GO 10
Run Code Online (Sandbox Code Playgroud)

...当然,如果需要计算,你可以在里面放一个增量计数器.

  • '去10'?SQL Server 2008不喜欢它. (3认同)

Som*_*luk 7

SQL服务器尚未正式支持for循环.已经有了实现FOR Loop不同方式的答案.我正在详细说明如何在SQL Server中实现不同类型的循环.

FOR Loop

DECLARE @cnt INT = 0;

WHILE @cnt < 10
BEGIN
   PRINT 'Inside FOR LOOP';
   SET @cnt = @cnt + 1;
END;

PRINT 'Done FOR LOOP';
Run Code Online (Sandbox Code Playgroud)

如果你知道,你需要完成循环的第一次迭代,那么你可以尝试DO..WHILEREPEAT..UNTIL版本的SQL服务器.

DO..WHILE循环

DECLARE @X INT=1;

WAY:  --> Here the  DO statement

  PRINT @X;

  SET @X += 1;

IF @X<=10 GOTO WAY;
Run Code Online (Sandbox Code Playgroud)

REPEAT..UNTIL循环

DECLARE @X INT = 1;

WAY:  -- Here the REPEAT statement

  PRINT @X;

  SET @X += 1;

IFNOT(@X > 10) GOTO WAY;
Run Code Online (Sandbox Code Playgroud)

参考

  • 这似乎已在此处复制粘贴重新排序:/sf/answers/3245432361/ (2认同)

Rag*_*gul 6

简单的答案是NO !!.

FOR在SQL 中没有,但你可以使用WHILEGOTO实现如何FOR工作的方式.

时间:

DECLARE @a INT = 10

WHILE @a <= 20
BEGIN
    PRINT @a
    SET @a = @a + 1
END
Run Code Online (Sandbox Code Playgroud)

去 :

DECLARE @a INT = 10
a:
PRINT @a
SET @a = @a + 1
IF @a < = 20
BEGIN
    GOTO a
END
Run Code Online (Sandbox Code Playgroud)

我总是喜欢WHILE过度GOTO陈述.