SQL 순환 문

declare @i intset @i=1while @i<30begininsert into test (userid) values(@i)set @i=@i+1end
---------------
while 조건 begin 실행 동작 set @ i = @ i + 1end
WHILE
SQL 문장 이나 문장 블록 을 중복 실행 하 는 조건 을 설정 합 니 다.지정 한 조건 이 진실 이 라면 실행 문 구 를 반복 합 니 다.BREAK 와 CONTINUE 키 워드 를 사용 하여 순환 내부 에서 WHILE 순환 에서 문장의 실행 을 제어 할 수 있 습 니 다.
문법
WHILE Boolean_expression     { sql_statement | statement_block }     [ BREAK ]     { sql_statement | statement_block }     [ CONTINUE ]
매개 변수
Boolean_expression
TRUE 나 FALSE 의 표현 식 을 되 돌려 줍 니 다.불 표현 식 에 SELECT 문 구 를 포함 하고 있다 면, SELECT 문 구 를 괄호 로 묶 어야 합 니 다.
{sql_statement | statement_block}
Transact - SQL 구문 이나 구문 블록 이 정의 하 는 구문 그룹 입 니 다.구문 블록 을 정의 하려 면 흐름 제어 키 BEGIN 과 END 를 사용 하 십시오.
BREAK
가장 안쪽 의 WHILE 순환 에서 빠 지게 만 들 었 다.END 키워드 뒤에 나타 나 는 모든 문 구 를 실행 합 니 다. END 키 워드 는 순환 종료 표시 입 니 다.
CONTINUE
WHILE 순환 을 다시 시작 하고 CONTINUE 키워드 뒤의 모든 문 구 를 무시 합 니 다.
주석
두 개 이상 의 WHILE 순환 이 내장 되 어 있 으 면 내부 의 BREAK 는 다음 외부 순환 으로 종 료 됩 니 다.먼저 내부 순환 이 끝 난 후의 모든 문 구 를 실행 한 다음 다음 외부 순환 을 다시 시작 합 니 다.
예시
A. 포 함 된 IF... ELSE 와 WHILE 에 서 는 BREAK 와 CONTINUE 를 사용 합 니 다.
다음 사례 에 서 는 평균 가격 이 30 달러 보다 적 으 면 WHILE 순환 으로 가격 을 배가 한 뒤 최고 가 를 선택한다.최고가 가 50 달러 보다 적 거나 같 으 면 WHILE 순환 이 다시 시작 되 고 다시 가격 을 배가 시킨다.이 순환 은 최고 가격 이 50 달러 를 넘 을 때 까지 가격 을 계속 배로 올 린 다음 WHILE 순환 을 종료 하고 메 시 지 를 인쇄 합 니 다.
USE pubs
GO
WHILE (SELECT AVG(price) FROM titles) < $30
BEGIN
     UPDATE titles
        SET price = price * 2
     SELECT MAX(price) FROM titles
     IF (SELECT MAX(price) FROM titles) > $50
        BREAK
     ELSE
        CONTINUE
END
PRINT 'Too much for the market to bear'

B. 커서 가 있 는 동안 WHILE 사용
아래 WHILE 구 조 는 count 입 니 다.all_rows 과정의 일부분.다음 예 에서 이 WHILE 구조 테스트 는 커서 의 함수 @ @ FETCH 에 사 용 됩 니 다.STATUS 의 반환 값 입 니 다.@ @ FETCH 때문에STATUS 는 - 2, - 1 또는 0 으로 돌아 갈 수 있 으 므 로 모든 상황 을 테스트 해 야 한다.이 저장 과정 을 시작 한 후 커서 결과 에서 한 줄 이 삭제 되면 이 줄 을 건 너 뜁 니 다.성공 추출 (0) 후 BEGIN... END 순환 내부 의 SELECT 문 구 를 실행 합 니 다.
USE pubs
DECLARE tnames_cursor CURSOR
FOR
     SELECT TABLE_NAME 
     FROM INFORMATION_SCHEMA.TABLES
OPEN tnames_cursor
DECLARE @tablename sysname
--SET @tablename = 'authors'
FETCH NEXT FROM tnames_cursor INTO @tablename
WHILE (@@FETCH_STATUS <> -1)
BEGIN
     IF (@@FETCH_STATUS <> -2)
     BEGIN     
        SELECT @tablename = RTRIM(@tablename) 
        EXEC ('SELECT ''' + @tablename + ''' = count(*) FROM ' 
              + @tablename )
        PRINT ' '
   END
     FETCH NEXT FROM tnames_cursor INTO @tablename
END
CLOSE tnames_cursor
DEALLOCATE tnames_cursor

좋은 웹페이지 즐겨찾기