0

すべて、givemデータベースから選択したテーブルを.csvファイルにエクスポートできるようにするエクスポートメカニズムを開発しました。bcpまたはを使用してこれを行うことができますsqlcmd。大きなテーブル(> 1〜2GB)の場合、テーブルをユーザー指定のサイズ(たとえば、200MB)の事前定義されたいくつかの.csvファイルに分割したいと思います。

ユーザーが指定したサイズを構成する行数を確認するにはどうすればよいですか?これはsqlcmd、次のようなコマンドを使用できるようにするためです

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;

TOP N正しい分割.csvサイズを取得する句を使用します。バッチ読み取りを使用して行をカウントする必要がある場合がありますか、それともこれを行うためのより良い方法がありますか?

4

1 に答える 1

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.
}

この回答は、エクスポートするファイルを分割するメカニズムを強調することを目的としています。データの読み取りとテキストファイルの書き込みの詳細は省略しましたが、 SqlDataReaderについて読んだり、テキストファイルを書き込んだりすることで、それらの詳細を知ることができます。

于 2012-10-31T12:12:24.213 に答える