Syntaxis van for-loop in SQL Server

Wat is de syntaxis van een FOR-lus in TSQL?


Antwoord 1, autoriteit 100%

T-SQL heeft geen FOR-lus, maar een WHILE-lus
TIJDENS (Transact-SQL)

WHILE Boolean_expression
BEGIN
END

Antwoord 2, autoriteit 92%

Er is geen for-loop, alleen de while-loop:

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

Antwoord 3, autoriteit 23%

Extra informatie

Om toe te voegen, aangezien niemand een antwoord heeft gepost waarin staat hoe je een dataset in een lus kunt herhalen. U kunt de trefwoorden OFFSET FETCHgebruiken .

Gebruik

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

Antwoord 4, autoriteit 12%

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

Antwoord 5, autoriteit 3%

Wat dacht je hiervan:

BEGIN
   Do Something
END
GO 10

… je zou er natuurlijk een oplopende teller in kunnen zetten als je moet tellen.


Antwoord 6, autoriteit 3%

Eenvoudig antwoord is NO !!.

Er is geen FORin SQL, maar u kunt WHILEof GOTOom te bereiken
de manier waarop de FORzal werken.

terwijl :

DECLARE @a INT = 10
WHILE @a <= 20
BEGIN
    PRINT @a
    SET @a = @a + 1
END

GA :

DECLARE @a INT = 10
a:
PRINT @a
SET @a = @a + 1
IF @a < = 20
BEGIN
    GOTO a
END

Ik geef altijd de voorkeur aan WHILEboven GOTO-statement.


Antwoord 7, autoriteit 3%

For loop wordt nog niet officieel ondersteund door SQL server. Er is al antwoordover het bereiken van de verschillende manieren van FORLoop. Ik geef een gedetailleerd antwoord op manieren om verschillende soorten lussen in de SQL-server te bereiken.

VOOR lus

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

Als je het weet, moet je de eerste iteratie van de lus toch voltooien, dan kun je de versie DO..WHILEof REPEAT..UNTILvan de SQL-server proberen.

DOEN..WHILE Loop

DECLARE @X INT=1;
WAY:  --> Here the  DO statement
  PRINT @X;
  SET @X += 1;
IF @X<=10 GOTO WAY;

HERHALEN..UNTIL Loop

DECLARE @X INT = 1;
WAY:  -- Here the REPEAT statement
  PRINT @X;
  SET @X += 1;
IFNOT(@X > 10) GOTO WAY;

Referentie


Antwoord 8

Probeer het, leer het:

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

Met datum:

DECLARE @d DATE = '2019-11-01'
WHILE @d < GETDATE()
BEGIN
    PRINT @d
    SET @d = DATEADD(DAY,1,@d)
END
PRINT 'n'
PRINT @d

Antwoord 9

While Loop-voorbeeld in T-SQL met de begin- tot einddatum van de huidige maand.

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;  

Other episodes