我的SQL Server中有两个数据库,每个数据库包含1个单表。
我有2个数据库,如下所示:
1)Db1(MySQL)
2)Db2(Oracle)
现在我要做的是用MySQL中的Db1数据填充SQL Server db1的数据库表,如下所示:
Insert into Table1 select * from Table1
从Table1中选择*(Mysql Db1) - 来自Mysql数据库的数据
插入Table1(Sql server Db1) - 插入来自Mysql的数据 考虑相同架构的数据库
我不想使用sqlbulk copy,因为我不想通过块数据插入块。我想在1中插入所有数据,考虑数百万个数据,因为我的操作不仅限于在数据库中插入记录。因此,用户必须等待很长时间,比如数百万的数据在数据库中通过块插入块,然后再次进行我的进一步操作,这也是长时间运行的操作。
因此,如果我将此进程加速,那么考虑到所有记录都在我的本地sql server实例中,我可以加快我的第二次操作。
这可能在C#应用程序中实现吗?
更新: 我研究了关于Linked server的问题 @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列。
我将使用这两个不同的RDBMS数据库表来比较Amount列。
在C#中我能做的就像在我的块中通过块记录获取块 数据表(在内存中) 然后将这些记录与代码的帮助进行比较,但考虑到数百万条记录,这需要花费大量时间。
所以我想做一些比这更好的事情。
因此,我想我在2个数据库中的本地SQL服务器实例中显示这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
当我在我的本地服务器实例中使用数据库:SqlServerDb和MysqlDb这两个不同的RDBMS数据时,上面的查询有效,这将获取以下数量不匹配的记录:
所以我试图将这些记录从源(Sql server Db)获取到其Amount列值不匹配的MySQL。
预期产出:
Id Amount
1 1000
2 2000
3 3000
那么有什么方法可以实现这种情况?