----- 질문을 바꾸도록 하겠습니다~ -----
테이블 변수 사용하여 WHILE 문을 구동하려고 합니다.
커서의 속도 문제로 테이블 변수를 사용하면 빠르다고 하여 그렇게 만들었습니다.
Declare @테이블변수 Table (
컬럼명 타입 Not Null,
컬럼명 타입 Not Null
)
이렇게 선언된 테이블 변수에 작업하고자 하는 레코드를 INSERT 시키려고 합니다.
그런데 insert 시킬 select 쿼리의 테이블 명이 동적으로 할당 되기 때문에 다음과 같이 작성하였습니다.
Set @insSQL = N'insert into @테이블변수 select 컬럼1, 컬럼2 from ' + @tableName + ' where 조건'
그랬더니 @테이블변수 선언이 있어야 한다고 오류가 나네요..
그래서 찾아봤습니다.
동적 쿼리에서 테이블 변수의 사용에 관하여..
두 가지 방법이 있더라구요
1. 선언문과 insert into 쿼리문을 전부 Set @insSQL 변수에 싸그리 넣어서 EXEC 시키는 방법
2. 타입 선언하여 처리하는 방법
질문입니다~
선언문과 변수테이블에 INSERT 작업하는 문을 모두 @insSQL 변수에 넣어 주고 EXEC sp_executesql @insSQL 해줘도
그 아래 쪽에서 @테이블변수를 사용하려고 하면 테이블 변수를 선언해야 한다면서 아예 프로시저가 만들어지지 않더라구요..
그럼 프로시저 전체 문장을 감싸서 넣어야 한다는 이야긴데... ㅡㅡ 이건 좀 아닌 것 같아서요..
그리고 타입 선언하는 방법은 쓰는 법을 잘 모르겠어서요...
검색과 학습의 한계를 느끼네요 ㅎㅎ
커서 속도 문제로 변수 테이블을 사용했는데 이렇게 되면 임시 테이블 같은 걸 생성하는 방법밖에는 없는건가요?
그럼 속도문제는 해결이 안될 것 같은데.. 조언 부탁드립니다.
Comment 1
-
Larry
2013.09.25 18:23
문제 해결 했습니다.
다른 방법이 있었네요..
Set @strSQL = "select 컬럼1, 컬럼2 from ' + @tableName + ' where 조건'
INSERT INTO @테이블변수 EXEC (@strSQL)
구글 뒤져보다가 임시테이블 뒤에 exec 로 쿼리 날려주는 걸 보고는 테이블변수에도 먹히나 해서 한번 해봤는데 되네요 ㅎㅎ
http://blog.naver.com/PostView.nhn?blogId=knight50&logNo=80127303114