programing

SQL Server의 for-loop 구문

lastcode 2023. 4. 7. 21:28
반응형

SQL Server의 for-loop 구문

의 구문은 무엇입니까?forTSQL의 루프?

for-loop은 없고 while-loop만 있습니다.

DECLARE @i int = 0

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

T-SQL에는FOR루프가 있습니다.WHILE고리
WHY(트랜잭트-SQL)

WHILE Boolean_expression
BEGIN

END

추가 정보

덧붙여, 루프내의 데이터 세트상에서 실제로 반복하는 방법을 포함한 회답은, 아무도 게재하고 있지 않습니다.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

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

이거 어때:

BEGIN
   Do Something
END
GO 10

...물론 계산해야 할 경우 증분 카운터를 넣을 수 있습니다.

for 루프는 아직 SQL Server에서 공식적으로 지원되지 않습니다.이미 FOR Loop의 다른 방법을 달성하는 것에 대한 답이 있다.SQL Server에서 다양한 유형의 루프를 달성할 수 있는 방법에 대한 답변을 자세히 알려드립니다.

FOR 루프

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..WHIL 루프

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;

언급

간단한 답은 입니다.

SQL에는 없습니다만, 또는 를 사용하여, 또는 를 사용하여, 다음과 같이 할 수 있습니다.FOR효과가 있습니다.

사이:

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

나는 항상 말보다 말을 더 좋아한다.

오래된 스레드이지만 아직 준비 중입니다.필요한 분들을 위해 'FOREACH' 솔루션을 제안하고 싶다고 생각했습니다.

DECLARE @myValue nvarchar(45);
DECLARE myCursor CURSOR FOR
SELECT [x] 
FROM (Values ('Value1'),('Value2'),('Value3'),('Value4')) 
as MyTable(x);
OPEN myCursor;
FETCH NEXT FROM myCursor INTO @myValue;
While (@@FETCH_STATUS = 0)
BEGIN
    PRINT @myValue
    FETCH NEXT FROM myCursor INTO @myValue;
END
CLOSE myCursor;     
DEALLOCATE myCursor;

SQL 세계에서는 재귀가 미움받는다는 것을 기록에 남겨두어야 합니다.그리고 타당한 이유로, 그것은 퍼포먼스에 매우 해로울 수 있습니다.다만, 유지보수/오프라인/벌크/애드혹/테스트등의 조작에는, 이 방법을 많이 사용하고 있습니다.

시험 삼아 배워보세요.

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

날짜 포함:

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

한편, 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;  

언급URL : https://stackoverflow.com/questions/6069024/syntax-of-for-loop-in-sql-server

반응형