1

我有两个数据库。其中一个属于 CRM 软件并且是源。

另一个将是我正在开发的工具使用的目的地。

目标将包含一个表,其中包含ADDRESSES源数据库中同名表的列的子集。

在这些数据库之间复制数据的最佳(最有效)方法是什么(顺便说一句:如果这很重要,它们位于不同的 SQL Server 实例上)。

我可以编写一个循环,对从源获得的每一行执行 INSERT 到目标,但我认为这不是有效的。

我的想法和信息:

  • 数据在从源到目的地的过程中不会改变
  • 它会在回来的路上被改变
  • 我没有源的完整结构,但我知道我需要哪些字段并且它们被保证在源中(因此,使用列的索引访问从源获得的行是不可能的)
  • 我不能使用 LINQ。

任何将我引向正确方向的东西都值得赞赏。

编辑:
我真的需要一种 C# 方法来复制数据。我还需要知道如何将复制的行合并回源。是否真的有必要(甚至是最佳实践)逐行执行此操作?

4

4 回答 4

2

为什么要编写代码来做到这一点?

最快和最简单的方法就是使用 SQL Server 的bcp.exe实用程序(bcp:B ulk Copy P rogram)。

  • 从源服务器导出数据。
  • 如果需要,请将其压缩或 tar。
  • 如果您需要将其移动到另一个盒子,请将其 FTP 到它需要去的地方。
  • 将其导入目标服务器。

您可以通过 SQL Server Management Studio 以多种不同的方式完成同样的事情。一旦定义了任务,就可以保存它并安排它。

您也可以使用 SQL Server 的 Powershell 对象来执行此操作。

如果您打算在 C# 中执行此操作:

  • 编写select查询以从源服务器获取所需的数据。
  • 执行它并用输出填充一个临时文件。
  • bulk insert针对目标服务器执行 SQL Server 的语句以插入数据。

注意:对于这些技术中的任何一种,如果目标表有标识列,则需要处理它们。您还需要处理关键冲突。有时更容易先将数据批量加载到永久临时表中,然后应用先决条件转换和操作将其放到需要去的地方。

于 2013-10-15T17:28:59.877 回答
1

According to your comment on Jwrit's answer, you want two way syncs.

If so, you might want to look into Microsoft Sync Framework.

We use it to sync 200+ tables on Premise SQL to SQL Azure and SQL Azure to SQL Azure.

You can use purely C#. However, it might offer a lot more than you want, or it might be over kill for a small project.

I'm just saying so that you can have different option for your project.

于 2013-10-15T17:31:27.747 回答
0

如果这些数据库存在于两台服务器上,您可以通过执行 sp_addlinkedserver 来设置服务器之间的链接,这里有设置说明。如果您计划定期“共享”数据,这可能会派上用场。

http://msdn.microsoft.com/en-us/library/ff772782.aspx

一旦服务器被链接,一个简单的选择语句可以将行从一个表复制到另一个表

插入到 db1.tblA(Field1,Field2,Field2) 从 db2.tblB 中选择 Field1,Field2,Field2

如果数据库在同一个实例上,您只需要执行与上述类似的 SQL

于 2013-10-15T17:14:00.257 回答
0

如果这是一次——最好的选择通常是 SSIS(SQL 服务器集成服务),除非有复杂的数据转换——您可以快速轻松地进行列映射,并在 15 分钟内(可靠地)完成...... .

于 2013-10-15T17:15:54.477 回答