如何使用插件将数据从Sql Server 2008 R2数据库传输到CRM 2011内部数据库?

时间:2012-07-31 20:32:59

标签: sql-server-2008-r2 dynamics-crm-2011

方案:
X_source = N/A.
Y_source = SQL server 2008 R2.
Z_source = CRM 2011 database.

我有一个Y_source,每天都会更新来自X_source的信息。完成之后Z_source必须连接到Y_source并上传该信息。我无法控制X& Y来源但确实知道Y_source将与Z_source在同一网络上。

问题:
由于我知道Y_source中有超过200,000条记录,因此我无法调用所有记录并将其上传到Z_source。我必须找到一种方法,我可以批量或1比1迭代它们。我想到的想法是使用T-SQL游标,但这似乎是错误的方法。

来源:
我有Y&的地址和凭据。 Z.我也可以控制Z_source

编辑 好吧,让我清楚一些我认为可能很重要的事情。:

  1. Z_source确实是一个与CRM 2011分开的数据库,但它是它的来源。

  2. 此外,更新Z_source的流程可以是CRM 2011中的外部流程。这意味着只要数据库更新,CRM是否会触发更新无关紧要。

  3. 要处理的记录数量将超过200,000。

3 个答案:

答案 0 :(得分:1)

我不知道你是否习惯了SSIS,但我认为它真的可以帮到你!

以下是关于它的两篇不错的帖子:http://gotcrm.blogspot.be/2012/07/crm-2011-data-import-export-using-cozy.htmlhttp://a33ik.blogspot.be/2012/02/integrating-crm-2011-using-sql.html

此致

凯文

答案 1 :(得分:1)

我提出的解决方案是创建一个C#控制台应用程序以连接到Y_source检索数据,然后使用CRM 2011 SDK使用快速入门应用程序:Sdk / samplecode / cs / quickstart并对其进行修改插入Z_source。这个应用程序将在Y_source更新后6小时通过Windows任务运行,所以是的,我不需要精确的触发器。

答案 2 :(得分:0)

一些事情:

  1. CRM 2011中的插件类似于SQL触发器。 CRM事件,例如CreateDeleteUpdateMerge等,触发执行您编写的代码插入。这似乎不适合您的情况,因为您希望独立于CRM操作分批进行操作。

  2. CRM 2011中的任何内容都不是基于集合的批处理。一切都是一次完成一个数据库行。 (为了证明这一点,请描述您认为应该在一个集合中完成的任何CRM事件并查看生成的SQL。)但是,仅仅因为CRM 2011不能使用基于集合的操作并不意味着您必须收集所有SQL Server中的源数据一次一行。

  3. 所以我建议如下:

    • 编写一个快速应用程序,立即从SQL Server中提取所有数据。在结果上调用.ToList()以将结果集放在内存中。
    • 遍历行列表,并为每个行在CRM 2011中执行相应的操作(CreateUpdateDelete等。
      • 对于每一行,请在CRM记录中包含该行的唯一标识符,以便将来在与Y-Source同步时知道是删除还是更新记录。
    • 安排您的应用在Y-Source更新时运行。

    根据您的需要,应用程序可以成为在SQL Server中调度或触发的CLR存储过程,在服务器上按计划运行的控制台应用程序,或其他任何可以完成上述操作的应用程序。最近的问题Schedule workflows via external tool也说明了这一点。