TSQL中for循环的语法是什么?


当前回答

DECLARE @intFlag INT
SET @intFlag = 1
WHILE (@intFlag <=5) 
BEGIN
    PRINT @intFlag
    SET @intFlag = @intFlag + 1
END
GO

其他回答

T-SQL没有FOR循环,它有WHILE循环 而(transact - sql)

WHILE Boolean_expression
BEGIN

END

SQL server还没有正式支持For循环。已经有了实现FOR Loop的不同方法的答案。我正在详细回答如何在SQL server中实现不同类型的循环。

FOR循环

DECLARE @cnt INT = 0;

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

PRINT 'Done FOR LOOP';

如果你知道,你需要完成循环的第一次迭代,那么你可以尝试DO..WHILE或REPEAT..UNTIL版本的SQL server。

做. . WHILE循环

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;

参考

旧线程,但仍然出现,我认为我将为那些需要一个“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世界中,递归是不受欢迎的。这是有原因的——它对性能非常不利。不过,对于维护/脱机/批量/临时/测试等操作,我经常使用这种方法。

这个怎么样:

BEGIN
   Do Something
END
GO 10

... 当然,如果需要计数,可以在其中放入增量计数器。

尝试一下,学习一下:

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