SQLのfor
ループの構文は何ですか?
T-SQLはFOR
ループを持っていません、それはWHILE
ループを持っています
WHILE(Transact-SQL)
WHILE Boolean_expression
BEGIN
END
Forループはなく、whileループだけがあります。
DECLARE @i int = 0
WHILE @i < 20
BEGIN
SET @i = @i + 1
/* do some work */
END
DECLARE @intFlag INT
SET @intFlag = 1
WHILE (@intFlag <=5)
BEGIN
PRINT @intFlag
SET @intFlag = @intFlag + 1
END
GO
ループ内のデータセットを実際に反復する方法を含む回答をだれも投稿していないので、追加するだけで、キーワード 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
これはどう:
BEGIN
Do Something
END
GO 10
あなたが数える必要があるなら...もちろん、あなたはその中に増分カウンターを置くことができます。
For loopはSQLサーバーではまだ正式にサポートされていません。 FOR Loopのさまざまな方法を達成するための answer がすでにあります。 SQLサーバーでさまざまな種類のループを実現する方法についての回答を詳述しています。
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バージョンを試すことができます。
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;
簡単な答えは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
ステートメントを好む。
今月の開始日から終了日までをリストする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;