我想使用我在C#中编写的解决方案将大量数据从SQL Server传输到MongoDB(大约8000万条记录)。我想一次传输20万条记录,但是我的问题是跟踪已传输的内容。通常我会按如下方式进行:
Gather IDs from destination to exclude from source scope
Read from source (Excluding IDs already in destination)
Write to destination
Repeat
问题是我在C#中构建了一个字符串,其中包含目标中存在的所有ID,目的是将这些ID从源选择中排除。
select * from source_table where id not in (<My large list of IDs>)
现在您可以想象,当我已经插入了60万条以上的记录,然后构建具有所有ID的字符串时,会发生什么情况,它变大了,甚至放慢了速度,所以我正在寻找一种方法来遍历20万条一次像光标一样进行记录,但是我从未做过这样的事情,所以我在这里寻求建议。
作为参考,我的阅读如下
SqlConnection conn = new SqlConnection(myConnStr);
conn.Open();
SqlCommand cmd = new SqlCommand("select * from mytable where id not in ("+bigListOfIDs+")", conn);
SqlDataReader reader = cmd.ExecuteReader();
if (reader.HasRows)
{
while (reader.Read())
{
//Populate objects for insertion into MongoDB
}
}
因此,基本上,我想知道如何遍历大量数据而无需一次选择所有数据,也不必使用大型字符串过滤数据。任何帮助,将不胜感激。
有许多不同的方法可以做到这一点,但我首先建议您不要尝试重新发明轮子,而要研究现有程序。有许多旨在在不同数据库之间导出和导入数据的程序,有些程序非常灵活且昂贵,但是有些程序带有免费选项,大多数DBMS程序都包含一些功能。
选项1:
使用SQL Server Management Studio(SSMS)导出向导。
这使您可以导出到其他来源。如果需要,您甚至可以编写复杂的查询。此处的更多信息:
https://www.mssqltips.com/sqlservertutorial/202/simple-way-to-export-data-from-sql-server/
选项2:
以ID升序导出数据。将最后导出的ID存储在表中。
导出ID> lastExportedID的下一组数据
选项3:
在备份表中创建数据的副本。从该表中导出,并在导出记录时将其删除。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句