반응형

업무에 관련된 일도 아니고 커뮤니티의 게시판에 올리는 거니깐 편하게 글을 생각입니다. MVP 계시고 쟁쟁한 실력자 분들도 많이 계셔서 긴장(?)되는지 글을 쓰고 싶어도 쉽게 올리겠더라구요. 그래도 들이대야 실력이 쌓일 같아서누가 뭐래도 일단 즐기면서 글을 생각입니다. 그냥 저런 녀석도 있구나 생각해주시고 참고될 사항이 있으면 덧글을 달아주세요. ^^

 


엑셀
2003에서 시트에 저장할 있는 최대 수는 65536행이라고 합니다.

DB 데이터가 백만 가량 있고 데이터를 엑셀로 내보내야 상황이 있다고 가정하겠습니다. 여러모로 백만 건을 모두 시트에 저장하는 것은 무리인 같습니다.

 

그래서 DB 데이터를 엑셀 시트에 분할하여 내보내는 방법에 대해서 생각해보고자 합니다.

(사실 생각 못했는데 생각해보라고 하셔서… -_-;;;)

 

<DB 데이터의 준비>

우선 아래의 쿼리를 실행해서 원본 데이터 백만 건을 준비합니다. Data 열에는 아무 문자열을 입력해도 상관없는데 며칠 게시물을 읽다가 rand함수가 보이길래 무심코 써보고 싶었습니다.

 

USE TEMPDB

CREATE TABLE SourceTable (

                  Seq INT IDENTITY(1, 1),

                  Data CHAR(3) DEFAULT (CHAR(ROUND(RAND() * 25, 0) + 97)

                                   + CHAR(ROUND(RAND() * 25, 0) + 97)

                                   + CHAR(ROUND(RAND() * 25, 0) + 97))

)

GO

 

SET NOCOUNT ON

INSERT SourceTable DEFAULT VALUES

GO 1000000

SET NOCOUNT OFF

 

SELECT COUNT(*) FROM SourceTable

SELECT TOP 100 Seq, Data FROM SourceTable

 


<
엑셀 파일의 준비>

저장 대상이 엑셀 파일을 준비합니다. 다른 것은 없고 엑셀을 실행 시키고 바로 저장합니다. 저장된 파일 이름은 ResultData.xls 하겠습니다. 저장한 폴더 이름과 파일 이름 정도만 기억해두겠습니다.

 

<SSIS 패키지 작성>

이런 구조의 패키지를 만들어 볼 생각입니다.

반응형

+ Recent posts