web-dev-qa-db-ja.com

SQL Serverでのforループの構文

SQLのforループの構文は何ですか?

208
Macho

T-SQLはFORループを持っていません、それはWHILEループを持っています
WHILE(Transact-SQL)

WHILE Boolean_expression
BEGIN

END
189
jams

Forループはなく、whileループだけがあります。

DECLARE @i int = 0

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

追加情報

ループ内のデータセットを実際に反復する方法を含む回答をだれも投稿していないので、追加するだけで、キーワード 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
20
Dan Cundy

これはどう:

BEGIN
   Do Something
END
GO 10

あなたが数える必要があるなら...もちろん、あなたはその中に増分カウンターを置くことができます。

7
i00

For loopはSQLサーバーではまだ正式にサポートされていません。 FOR Loopのさまざまな方法を達成するための answer がすでにあります。 SQLサーバーでさまざまな種類のループを実現する方法についての回答を詳述しています。

FOR Loop

DECLARE @cnt INT = 0;

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

PRINT 'Done FOR LOOP';

あなたが知っているなら、とにかくループの最初の繰り返しを完了する必要があります、そしてあなたはSQLサーバのDO..WHILEまたはREPEAT..UNTILバージョンを試すことができます。

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;

参照

6
Somnath Muluk

簡単な答えはNO !!です。

SQLにはFORはありませんが、WHILEまたはGOTOを使用してFORの動作方法を実現できます。

WHILE:

DECLARE @a INT = 10

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

後藤:

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

私はいつもWHILE/よりGOTOステートメントを好む。

6
Ragul

今月の開始日から終了日までをリストするT-SQLのWhileループの例。

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