it-swarm.com.de

Syntax der for-Schleife in SQL Server

Wie lautet die Syntax einer for -Schleife in SQL?

214
Macho

T-SQL hat keine FOR -Schleife, sondern eine WHILE -Schleife
WHILE (Transact-SQL)

WHILE Boolean_expression
BEGIN

END
194
jams

Es gibt keine for-Schleife, nur die while-Schleife:

DECLARE @i int = 0

WHILE @i < 20
BEGIN
    SET @i = @i + 1
    /* do some work */
END
340
TcKs
DECLARE @intFlag INT
SET @intFlag = 1
WHILE (@intFlag <=5) 
BEGIN
    PRINT @intFlag
    SET @intFlag = @intFlag + 1
END
GO
27
kashmir

Zusatzinformation

Nur um hinzuzufügen, dass niemand eine Antwort gepostet hat, in der beschrieben ist, wie ein Datensatz innerhalb einer Schleife durchlaufen wird, können Sie die Schlüsselwörter OFFSET FETCH verwenden.

Verwendungszweck

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
25
Dan Cundy

Wie wäre es damit:

BEGIN
   Do Something
END
GO 10

... Natürlich können Sie einen inkrementellen Zähler einfügen, wenn Sie zählen müssen.

7
i00

Die For-Schleife wird von SQL Server noch nicht offiziell unterstützt. Es gibt bereits Antwort beim Erreichen FÜR Schleifens verschiedene Wege. Ich erläutere die Antwort auf Möglichkeiten zum Erreichen verschiedener Arten von Schleifen in 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';

Wenn Sie wissen, dass Sie die erste Iteration der Schleife trotzdem durchführen müssen, können Sie versuchen, DO..WHILE oder REPEAT..UNTIL Version von SQL Server.

DO..WHILE Loop

DECLARE @X INT=1;

WAY:  --> Here the  DO statement

  PRINT @X;

  SET @X += 1;

IF @X<=10 GOTO WAY;

REPEAT..UNTIL-Schleife

DECLARE @X INT = 1;

WAY:  -- Here the REPEAT statement

  PRINT @X;

  SET @X += 1;

IFNOT(@X > 10) GOTO WAY;

Referenz

7
Somnath Muluk

Einfache Antwort ist NO !!.

In SQL gibt es kein FOR. Sie können jedoch WHILE oder GOTO verwenden, um die Funktionsweise des FOR zu bestimmen.

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
_

Ich bevorzuge immer WHILE gegenüber GOTO.

6
Ragul

While-Schleifen-Beispiel in T-SQL, in dem das Anfangs- bis Enddatum des aktuellen Monats aufgeführt ist.

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;  
0
Sameer