Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- XML
- 자바기초
- WML
- VARIABLE
- asp함수
- instr
- SPLIT
- sql업데이트
- inner join
- array
- wap
- VarType
- sql랭킹
- JavaScript
- 인젝션
- sql순위
- xmldom
- 정규식
- injection
- 이미지세로길이
- 한글입력체크
- join
- MSSQL보안
- javascript 한글입력체크
- tempDB
- ERD
- 이미지가로길이
- FileSystemObject
- jdbc driver
- update
Archives
- Today
- Total
3초기억력
MS-SQL- Cursor 사용예제3 본문
저장 프로시저내에서도 일반 프로그램처럼 While 문과 같은 루핑문장을 사용하고자 할 경우가 있다.
이는 일반적으로 단일 Row만을 검출해서 값을 비교할수 없는 여러 Row의 값이 출력되어야 할경우에 사용하게 된다.
이런경우 일반적으로 사용되는 방법은
1. Select 문을 통해서 레코드정보(A)를 얻는다.
2. ASP 페이지에서 WHILE(또는 LOOP)문을 통해서 A의 값을 순차적으로 루핑을 시키면서
3. INSERT, UPDATE 또는 기타 수행문을 실행한다.
4. A의 레코드를 닫는다.
의 순서로 진행되어진다.
하지만 이런경우 여러개의 쿼리들을 돌아다녀야하고, 수행 속도또한 웹페이지(웹서버)에 디펜던트 하기때문에 속도적으로 불리한면이 있다.
이를 보완하기위해서 다음과 같이 커서를 사용할수 있다.
DECLARE @scode int, @ecode int, @title varchar(300),
@icnt int, @spos int, @currSN int
set @spos = 100
DECLARE sn_cursor CURSOR
FOR
SELECT sn
FROM table_name with (readuncommitted)
WHERE sn > 0
AND (code >= @scode AND code <= @ecode)
AND (title like '%'+@title+'%' or keyword like '%'+@title+'%' or content like '%'+@title+'%')
ORDER BY sn desc
OPEN sn_cursor
FETCH NEXT FROM sn_cursor INTO @currSN
WHILE (@@FETCH_STATUS <> -1)
BEGIN
IF (@@FETCH_STATUS <> -2)
BEGIN
IF @icnt > @spos
BREAK
ELSE
BEGIN
set @icnt = @icnt + 1
FETCH NEXT FROM sn_cursor INTO @currSN
END
END
END
CLOSE sn_cursor
DEALLOCATE sn_cursor
위의 쿼리는 `table_name`의 테이블로 부터 sn값을 추출하여 데이터가 존재하는 경우에(Not EOF(-1) 또는 No Error(-2)) @spos(100) 번째 로우가 출현했을때의 값을 @currSN 에 넣어주는 쿼리이다.
이 쿼리의 사용은 MS-SQL의 취약중에 하나일 rownum을 대치하기 위한 방법으로,
특정갯수의 row를 지나치고난 다음값을 리턴함으로 그 값부터의 top 20 Row를 추출하기 위해 사용하였다.
[출처] MSSQL 저장프로시저에서 커서사용|작성자 하이파이브팀
'쿼리_MSSQL' 카테고리의 다른 글
MS-SQL- 년월일시분초 를 14자리로 바꾸는 쿼리 (0) | 2010.04.16 |
---|---|
MS-SQL - Cursor 사용 예제4 (0) | 2010.04.06 |
MS-SQL- Cursor 사용 예제2 (0) | 2010.04.06 |
MS-SQL- 프로시저, split 효과 (0) | 2010.03.30 |
MS-SQL- ASP 페이징 처리 SQL 구문 (0) | 2010.02.04 |
Comments