在C#中的两个SQL Server数据库之间复制数据

时间:2013-10-15 16:44:48

标签: c# sql-server

我有两个数据库。其中一个属于CRM软件,是源代码。

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

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

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

我可以编写一个循环,它对从源获取的每一行进入INSERT但不认为这是有效的。

我的想法和信息:

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

任何引导我走向正确方向的事情都值得赞赏。

修改
我真的需要一种C#方式来复制数据。我还需要知道如何将复制的行合并回源。是否真的有必要(甚至是最佳做法)一行一行地做这个?

4 个答案:

答案 0 :(得分:2)

为什么要编写代码来执行此操作?

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

  • 从源服务器导出数据。
  • 如果需要,请将其拉​​出或打焦。
  • 如果您需要将其移至另一个盒子,请将其FTP到需要的位置。
  • 将其导入目标服务器。

你可以完成同样的事情via SQL Server Management Studio in a number of different ways。一旦您定义了任务,就可以保存它并安排它。

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

如果您已开始在C#中执行此操作:

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

注意:对于上述任何一种技术,如果目标表具有标识列,则需要处理标识列。您还需要处理关键冲突。有时更容易将数据批量加载到 perma-temp 表中,然后应用先决条件转换和操作将其转移到需要的位置。

答案 1 :(得分:1)

根据你对Jwrit的答案的评论,你想要双向同步。

如果是这样,您可能需要查看Microsoft Sync Framework

我们使用它将Premise SQL上的200多个表同步到SQL Azure,将SQL Azure同步到SQL Azure。

您可以纯粹使用C#。但是,它可能会提供比您想要的更多,或者它可能会超过一个小项目。

我只是这样说,您可以为项目选择不同的选项。

答案 2 :(得分:0)

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

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

连接服务器后,简单的select语句可以将行从一个表复制到另一个表

INSERT INTO db1.tblA(Field1,Field2,Field2) SELECT Field1,Field2,Field2 FROM db2.tblB

如果数据库位于同一个实例上,则只需执行与上述类似的SQL

答案 3 :(得分:0)

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