全部,我已经开发了一种导出机制,允许将来自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大小。我可能需要使用批量读取来计算行数,还是有更好的方法来执行此操作?
答案 0 :(得分: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和writing text files获取有关这些文件的更多信息。