Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将大数据迁移到新数据库_C#_Sql Server_Cursor - Fatal编程技术网

C# 将大数据迁移到新数据库

C# 将大数据迁移到新数据库,c#,sql-server,cursor,C#,Sql Server,Cursor,我想使用我用C编写的解决方案将大量数据从SQL Server传输到MongoDB,大约8000万条记录。 我想一次传输200000条记录,但我的问题是跟踪已经传输的内容。通常情况下,我会这样做: Gather IDs from destination to exclude from source scope Read from source (Excluding IDs already in destination) Write to destination Repeat 问题是我在C中构建了

我想使用我用C编写的解决方案将大量数据从SQL Server传输到MongoDB,大约8000万条记录。 我想一次传输200000条记录,但我的问题是跟踪已经传输的内容。通常情况下,我会这样做:

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>)

因此,基本上,我想知道如何迭代大量数据,而无需一次选择所有数据,或使用大字符串过滤数据。任何帮助都将不胜感激。

需要更多的代表发表评论,但如果您按id列排序,您可以将where子句更改为

select * from source_table where *lastusedid* < id and id <= *lastusedid+200000*

这将为您提供所需的200000范围,您只需要存储单个整数

有许多不同的方法,但我建议您首先不要尝试重新发明轮子,而是查看现有的程序。 有许多程序设计用于在不同数据库之间导出和导入数据,有些程序非常灵活且昂贵,但其他程序提供免费选项,大多数DBMS程序都包含一些内容

备选案文1:

使用SQL Server Management Studio SSMS导出向导

这允许您导出到不同的源。如果需要,您甚至可以编写复杂的查询。更多信息请点击此处:

备选案文2:

按ID升序导出数据。 将上次导出的ID存储在表中

导出下一组数据,其中ID>lastportedid

备选案文3:

在备份表中创建数据的副本。
从这个表中导出,并在导出记录时将其删除。

我希望有某种方法可以使用类似光标或异步的方法一次遍历N个记录,但在谷歌搜索了很多次之后,我空手而归。我必须接受将最后使用的ID存储在单独表中的方法。谢谢你的帮助。
select * from source_table where *lastusedid* < id and id <= *lastusedid+200000*