MSSQL2000에는 DTS라는 훌륭한 도구가 있다. 데이터베이스의 레코드를 엑셀과 같은 외부 파일로 내보내거나, 반대로 외부 파일의 레코드를 데이터베이스로 가져올 수 있다. 그런데 내보내기를 할 때 주의하지 않으면 작업을 다시 해야 하는 상황이 벌어질 수도 있다.
내보내기를 할 때는 주로 엑셀(XLS) 또는 CSV 파일 형식이 사용된다. 두 가지 모두 장단점이 있다. 우선 레코드의 개수가 약 6.5만건이 넘어가는 경우에는 엑셀을 사용할 수 없다. (정확하게는 레코드 개수는 65536까지, 필드의 개수는 255개까지 가능하다.) DTS는 조회 쿼리가 몇 건의 레코드를 반환할지 모르기 때문에, 10만건을 반환하게 될 SELECT 쿼리일지라도 에러를 반환하지 않는다. 엑셀 파일의 저장 한계에 달했을 때에야 비로소 작동을 멈추고 오류 메시지를 보여준다. 만약 퇴근하기 전에 실행시킨 내보내기 명령이나 자동화된 DTS 패키지에서 이런 오류가 발생하면, 다음날에는 짜증나는 오류 메시지와 함께 근무를 시작하게 될 것이다.
이런 제약조건 때문에 csv로 내보내기를 하는 경우가 많다. csv로 내보내면 레코드 개수나 필드 개수의 제한은 없어진다. csv는 매우 간단한 형식인데 주로 다음과 같이 구성된다.
도시, 이름, 하고 싶은 말 서울, 최재훈, 메롱이다! 뉴욕, 제임스, 자바의 아버지 제임스 고슬링
필드는 쉼표로 구분하고, 각 레코드는 [CR][LF] 값으로 나눈다. 물론 DTS에서는 쉼표나 [CR][LF]을 다른 값으로 대체해도 처리할 수 있다. 일단 위와 같은 경우만 고려해 보면, 하고 싶은 말에 쉼표, 나
이 중간에 들어가면 어떻게 될까?라는 값이 들어가야 한다고 해보자. 이때는 텍스트 한정자를 정하면 된다. 텍스트 한정자가 "일 때 레코드는 다음과 표시된다.
"서울", "슈퍼맨", "쉼표, 나 이 중간에 들어가면 어떻게 될까"
그러나 하고 싶은 말 필드에 어떤 문자든 들어갈 수 있다면 도무지 방법이 없다. "따옴표, 쉼표 모두 들어가면 어쩔건데?"라는 값은 어떻게 처리해야 할까? csv로 변환할 때는 항상 이런 문제를 겪기 마련이다. 사실 정답은 없다. 경우에 따라 대처하는 수밖에 없다.