0

总而言之,我开发了一种导出机制,允许从给定数据库中选择的表导出到 .csv 文件;我可以使用bcpor来做到这一点sqlcmd。对于大表(> 1-2GB),我想将表拆分成几个预先确定的、用户指定大小的 .csv 文件(比如 200MB)。

如何确定构成用户指定大小的行数?这样我就可以使用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 回答