SQL Server의 for-loop 구문
의 구문은 무엇입니까?for
TSQL의 루프?
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
'programing' 카테고리의 다른 글
디폴트 WPF 컨트롤 템플릿은 어디서 구할 수 있나요? (0) | 2023.04.12 |
---|---|
매개 변수 선언에서 varchar(MAX)의 크기는 어떻게 됩니까? (0) | 2023.04.07 |
TSQL 피벗(애그리게이트 기능 없음) (0) | 2023.04.07 |
개별 항목에 액세스할 수 있도록 구분된 문자열을 분할하려면 어떻게 해야 합니까? (0) | 2023.04.07 |
WHERE 절(SQL Server 사용 중)에서 대소문자를 구분하는 검색 방법은 무엇입니까? (0) | 2023.04.07 |