2012-10-31 2 views
0

전체적으로 givem 데이터베이스의 선택된 테이블을 .csv 파일로 내보낼 수있는 내보내기 메커니즘을 개발했습니다. bcp 또는 sqlcmd을 사용하여이 작업을 수행 할 수 있습니다. 큰 테이블 (> 1-2GB)의 경우, 테이블을 미리 정해진 사용자 지정 크기 (예 : 200MB)의 여러 .csv 파일로 분할하려고합니다.크기에 따라 데이터베이스 테이블 분할 및 내보내기

사용자가 지정한 크기를 구성하는 행 수는 어떻게 결정합니까? 이것은 내가 올바른 분할 .CSV 크기를 얻을 수있는 TOP N 절을 다음

DECLARE @sql VARCHAR(8000); 
SELECT @sql = 'sqlcmd -S' + @@SERVERNAME + ' -E -Q ' + 
       '"SELECT * FROM Ia.dbo.[Episode];" -o "F:\aaData\Test2.csv" -s"," -W'; 
EXEC master..xp_cmdshell @sql; 

같은 sqlcmd 명령을 사용할 수 있습니다. 일괄 처리를 사용하여 행을 계산해야 할 수도 있고,이를 수행하는 더 좋은 방법이 있습니까?

답변

1

내 보낸 파일을 가능한 한 사용자가 지정한 크기에 가깝게 배치하려면 프로그래밍 방식을 사용해야합니다. 고려 :

public void Export(int fileSize) 
{ 
    SqlDataReader reader = // command to return the recordset to export... 

    int bytesLeft = fileSize; 

    // open first output file 
    while (reader.Read()) 
    { 
     // write the row 
     bytesLeft -= // length of the row you just wrote 

     if (bytesLeft <= 0) 
     { 
      // close this file 
      // open the next file 
      bytesLeft = fileSize; 
     } 
    } 

    // close the last file. 
} 

이 답변은 내보내는 파일을 분할하는 방법을 강조하기위한 것입니다. 데이터 읽기 및 텍스트 파일 쓰기에 대한 세부 정보는 SqlDataReaderwriting text files에 대한 자세한 내용을 참조하십시오.

+0

파일을 후 처리 단계로 분리하는 매우 정교한 클래스를 작성했습니다. 이 아이디어에 기반을두고 신속합니다! 시간 내 줘서 고마워... – MoonKnight

관련 문제