/*
1. CURSOR 의 사용
1) CURSOR 를 정의
2) CURSOR를 이용하여 인출할 테이블 조회
3) CURSOR 를 사용하기 위해 OPEN한다.
4) CURSOR의 첫번째 ROW를 인출하여 @COLNAME, @ITEMNAME 변수에 저장한다.
5) 조회 결과의 마지막 까지 순서대로 한 ROW씩 인출하여 활용 [WHILE @@FETCH_STATUS = 0]
6) OPEN 되어 있는 CURSOR를 CLOSE
7) CURSOR 참조를 제거한다.
*/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[UP_PROCEDURE]
@SEQ VARCHAR(20)
AS
DECLARE @SQLSTMT VARCHAR(8000)
DECLARE @COLNAME VARCHAR(50)
DECLARE @ITEMNAME VARCHAR(50)
-- CURSOR 를 정의
DECLARE INSPDATA_CUR CURSOR FOR
-- IN에 지정한 항목명에 해당하는 ROW를 조회한다.
SELECT COLNAME,ITEMNAME FROM [TB_COL]
WHERE EQGRID = 'A28'
AND ITEMNAME IN ('X', 'Y', 'BB', 'CC')
ORDER BY COLNAME
SET @SQLSTMT = ''
-- CURSOR 를 사용하기 위해 OPEN한다.
OPEN INSPDATA_CUR
-- CURSOR의 첫번째 ROW를 인출하여 @COLNAME, @ITEMNAME 변수에 저장한다.
FETCH NEXT FROM INSPDATA_CUR
INTO @COLNAME, @ITEMNAME
-- 현재 연결에서 연 모든 커서에 대해 실행된 마지막 커서 FETCH 문의 상태를 반환합니다.
-- 0 : FETCH 문이 성공적으로 수행되었습니다.
-- -1 : FETCH 문이 실패했거나 행이 결과 집합의 범위를 벗어났습니다.
-- -2 : 인출된 행이 없습니다.
WHILE @@FETCH_STATUS = 0
BEGIN
SET @SQLSTMT = @SQLSTMT + @COLNAME + ' AS ' + @ITEMNAME + ', '
FETCH NEXT FROM INSPDATA_CUR
INTO @COLNAME,@ITEMNAME
END
PRINT @SQLSTMT
IF LEN(@SQLSTMT) <> 0
BEGIN
SET @SQLSTMT = SUBSTRING(@SQLSTMT, 1,LEN(@SQLSTMT)-1)
SET @SQLSTMT = 'SELECT ' + @SQLSTMT + ' FROM [TB_DATA] '
PRINT @SQLSTMT
exec (@SQLSTMT)
END
-- OPEN 되어 있는 CURSOR를 CLOSE
CLOSE INSPDATA_CUR
-- CURSOR 참조를 제거한다.
DEALLOCATE INSPDATA_CUR
'SQL > MYSQL' 카테고리의 다른 글
ORACLE -> MYSQL 대체 함수 (0) | 2015.03.16 |
---|---|
MS-SQL BULK INSERT시 데이터 형식 (0) | 2014.06.11 |
[MS-SQL 2008 PROCEDURE] 컬럼명을 조회하여 쿼리문을 만들고 실행하기 (0) | 2014.06.11 |
[MS-SQL 2008 PROCEDURE] 임시 테이블에 값을 저장하여 UPDATE후 임시 테이블 내용을 조회하여 RETURN (0) | 2014.06.11 |
[MS-SQL] 테이블별 ROW COUNT를 SYSTEM 테이블에서 가져오기 (0) | 2014.06.11 |
MS-SQL 페이징 쿼리문 (0) | 2014.06.11 |
MS- SQL 테입블 목록 조회, 테이블별 컬럼 조회하기 (0) | 2014.06.11 |
[Ms-sql]오라클에 있는 dual 테이블과 비슷한 기능을 하는것 (0) | 2014.02.13 |