我正在处理一个有数百万行的巨大数据库。我想通过C#运行一条SQL语句,它从一个数据库中选择120万行,并在解析和修改一些数据后将它们插入到另一个数据库中。
我最初希望这样做:首先运行select语句,然后通过遍历包含数据的MySqlDataReader对象来解析数据。这将是一个内存开销,所以我决定选择一行,解析它并插入到另一个数据库中,然后移到下一行。
如何做到这一点?我尝试过MySQL查询的SELECT....INTO语法,但是这似乎仍然选择了所有数据,然后将其插入到后面。
发布于 2014-10-10 16:32:49
使用SqlBulkCopy类将数据从一个源移动到另一个源
http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy%28v=vs.110%29.aspx
发布于 2014-10-10 16:51:52
我不确定您是否能够向现有表中添加新列。如果能够添加新列,则可以使用新列作为标志。它可以是"TRANSFERED(boolean)“。
您将使用条件TRANSFERED=FALSE一次选择一行,然后执行该过程。在处理该行之后,您应该以TRANSFERED=TRUE的身份进行更新。
或者,您必须在现有的表中有一个唯一的id列。创建一个临时表,该表将存储已处理行的id,这样您就可以知道哪些行已处理或未处理。
发布于 2014-10-10 17:22:55
我不太确定你的错误是什么。对于您的情况,我建议您应该使用'select TOP1000‘来获取数据,因为一个接一个地插入行非常慢。之后,你可以使用insert into query,需要注意的是sqlbulkcopy只适用于sql server,我建议你使用string big来进行sql查询,因为如果你使用string,它将有很大的连接字符串的开销。
https://stackoverflow.com/questions/26294997
复制相似问题