Синтаксис for-loop в SQL Server
каков синтаксис for
цикл в TSQL?
8 ответов
T-SQL не имеет FOR
цикл, он имеет WHILE
цикл
WHILE (Transact-SQL)
WHILE Boolean_expression
BEGIN
END
нет никакого for-loop, только while-loop:
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
Как насчет этого:
BEGIN
Do Something
END
GO 10
... конечно, вы можете поместить в него инкрементный счетчик, Если вам нужно подсчитать.
Дополнительная Информация
просто добавить как никто не отвечал, что включает в себя как на самом деле итерации хотя набор данных внутри цикла, вы можете использовать ключевые слова СМЕЩЕНИЕ ВЫБОРКИ.
использование
DECLARE @i INT = 0;
SELECT @total = Count(*) FROM DATASET
WHILE @i < @total
BEGIN
SELECT * FROM TABLE
ORDER BY COLUMN
OFFSET @i ROWS
FETCH NEXT 1 ROWS ONLY
SET @i = @i + 1;
END
простой ответ:NO !!
.
нет
FOR
в SQL, но вы можете использоватьWHILE
илиGOTO
для достижения путь, какFOR
будет работать.
в то время как:
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
заявление.
цикл For официально еще не поддерживается SQL server. Уже есть ответ по достижении на петля по-разному. Я подробно отвечаю о способах достижения различных типов циклов в SQL server.
цикл
DECLARE @cnt INT = 0;
WHILE @cnt < 10
BEGIN
PRINT 'Inside FOR LOOP';
SET @cnt = @cnt + 1;
END;
PRINT 'Done FOR LOOP';
Если вы знаете, вам нужно завершить первую итерацию цикла в любом случае, то вы можете попробовать DO..В то время как или повторить..Пока версия SQL server.
DO..В ТО ВРЕМЯ КАК Петля
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;
в то время как пример цикла в T-SQL, который перечисляет дату начала текущего месяца до конца.
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;