从一个表读取并插入另一个表 - 一次一行

时间:2014-10-10 08:26:48

标签: c# mysql sql .net

我正在处理一个包含数百万行的庞大数据库。我想通过C#运行一个SQL语句,它从一个数据库中选择120万行,并在解析和修改一些数据后将它们插入到另一个数据库中。

我最初想要这样做,首先运行select语句并通过迭代包含数据的MySqlDataReader对象来解析数据。这将是一个内存开销,所以我决定选择一行,解析它并插入另一个数据库,然后移动到下一行。

如何做到这一点?我已经为MySQL查询尝试了SELECT....INTO语法,但是这似乎仍然选择了所有数据,然后将其插入。

3 个答案:

答案 0 :(得分:0)

使用SqlBulkCopy类将数据从一个源移动到另一个

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy%28v=vs.110%29.aspx

答案 1 :(得分:0)

我不确定您是否能够在现有表中添加新列。如果能够添加新列,则可以将新列用作标志。它可能是“TRANSFERED(boolean)”。

您将使用条件TRANSFERED = FALSE一次选择一行并执行该过程。处理完该行后,您应该更新为TRANSFERED = TRUE。

或者,您必须在现有表中具有uniqe id列。创建一个临时表,它将存储已处理行的ID,这样您就可以知道哪些行已处理

答案 2 :(得分:0)

我不太确定你的错误是什么。对于您的情况,我建议您使用'选择前1000名'获取数据因为逐行插入行非常慢。在那之后,你可以使用' insert into query',应该注意sqlbulkcopy只适用于sql server,我建议你使用stringbuilder来进行sql查询,如果你使用string,它会有一个连接字符串的开销很大。