【发布时间】:2018-05-28 14:17:53
【问题描述】:
到目前为止,我的 SQL Server 中有两个数据库,每个数据库都包含一个表。
我有 2 个如下数据库:
1) Db1 (MySQL)
2) Db2 (Oracle)
现在我要做的是用来自 MySQL 的 Db1 的数据填充我的 SQL Server db1 数据库表,如下所示:
Insert into Table1 select * from Table1
Select * from Table1(Mysql Db1) - 来自 Mysql 数据库的数据
Insert into Table1(Sql server Db1) - 插入来自 Mysql 的数据 考虑相同架构的数据库
我不想使用 sqlbulk 复制,因为我不想逐块插入数据。考虑到数百万个数据,我想一次性插入所有数据,因为我的操作不仅限于在数据库中插入记录。因此,用户必须等待很长时间,例如首先将数百万个数据逐块插入数据库中,然后再等待我的进一步操作,这也是长时间运行的操作。
所以如果我加快了这个过程,那么考虑到所有记录都在我的 1 个本地 sql 服务器实例中,我可以加快第二次操作。
这可以在 C# 应用程序中实现吗?
更新:我研究了链接服务器,因为 @GorDon Linoff 建议我可以使用链接服务器来实现这种情况,但根据我的研究,我似乎不能通过代码创建链接服务器。
我想在 ado.net 的帮助下做到这一点。
这正是我想要做的:
假设我有 2 个不同的客户端 RDBMS,其中包含 2 个数据库和客户端中的一些表。
所以数据库是这样的:
Sql Server :
Db1
Order
Id Amount
1 100
2 200
3 300
4 400
Mysql or Oracle :
Db1:
Order
Id Amount
1 1000
2 2000
3 3000
4 400
现在我想比较源(SQL Server)和目标数据库(MySQL 或 Oracle)的 Amount 列。
我将用于连接这 2 个不同的 RDBMS 数据库表来比较 Amount 列。
在 C# 中,我可以做的是在我的 数据表(内存中) 中逐块获取记录,然后在代码的帮助下比较这些记录,但考虑到数百万条记录,这将花费大量时间.
所以我想做比这更好的事情。
因此我想我在我的本地 SQL 服务器实例中的 2 个数据库中提取这 2 个 RDBMS 记录,然后根据 Id 创建连接这 2 个表的连接查询,然后利用可以比较这数百万的 DBMS 处理能力高效记录。
这样的查询可以有效地比较数百万条记录:
select SqlServer.Id,Mysql.Id,SqlServer.Amount,Mysql.Amount from SqlServerDb.dbo.Order as SqlServer
Left join MysqlDb.dbo.Order as Mysql on SqlServer.Id=Mysql.Id
where SqlServer.Amount != Mysql.Amount
当我的本地服务器实例中有这 2 个不同的 RDBMS 数据时,上述查询有效:SqlServerDb 和 MysqlDb,这将获取以下数量不匹配的记录:
所以我试图将那些记录从源(Sql server Db)获取到其 Amount 列值不匹配的 MySQL。
预期输出:
Id Amount
1 1000
2 2000
3 3000
那么有什么办法可以实现这个场景呢?
【问题讨论】:
-
使用链接服务器。
-
@GordonLinoff 我在项目中提到的链接服务器是否可能?
-
链接服务器应该可以的。
-
@GordonLinoff 非常感谢您的建议,但看起来链接服务器仅适用于 Sql 服务器,但如果我将数据库放在 Mysql 或 Oracle 中,它将无法工作。
-
我不同意你的观点,即通过数据库链接将数据从 oracle 拖到 sqlserver 将比每个数据库的专用批量导出/导入例程更快