SQL Server中for循环的语法

时间:2011-05-20 07:55:23

标签: sql sql-server loops tsql syntax

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

9 个答案:

答案 0 :(得分:332)

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

DECLARE @i int = 0

WHILE @i < 20
BEGIN
    SET @i = @i + 1
    /* do some work */
END

答案 1 :(得分:190)

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

WHILE Boolean_expression
BEGIN

END

答案 2 :(得分:27)

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

答案 3 :(得分:20)

额外信息

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

答案 4 :(得分:7)

这个怎么样:

BEGIN
   Do Something
END
GO 10

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

答案 5 :(得分:6)

简单回答是 NO !!

  

SQL中没有 FOR ,但您可以使用 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

我总是喜欢 WHILE 而不是 GOTO 声明。

答案 6 :(得分:6)

SQL服务器尚未正式支持For循环。已经有answer来实现 FOR 循环的不同方式。我正在详细说明如何在SQL服务器中实现不同类型的循环。

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服务器。< / p>

DO..WHILE循环

DECLARE @X INT=1;

WAY:  --> Here the  DO statement

  PRINT @X;

  SET @X += 1;

IF @X<=10 GOTO WAY;

REPEAT..UNTIL循环

DECLARE @X INT = 1;

WAY:  -- Here the REPEAT statement

  PRINT @X;

  SET @X += 1;

IFNOT(@X > 10) GOTO WAY;

Reference

答案 7 :(得分:0)

在T-SQL中循环示例,列出当前月份的开始日期。

RSpec.configure do |config|

    # Tag Rake specs with `:task` metadata or put them in the spec/tasks dir
    config.define_derived_metadata(:file_path => %r{/spec/tasks/}) do |metadata|
    metadata[:type] = :task
    end

    config.include TaskExampleGroup, type: :task

    config.before(:suite) do
    Rails.application.load_tasks
    end
end

答案 8 :(得分:0)

尝试一下,学习它:

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