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

Sql server 2008 r2 如何使用插件将数据从Sql Server 2008 R2数据库传输到CRM 2011内部数据库?,sql-server-2008-r2,dynamics-crm-2011,Sql Server 2008 R2,Dynamics Crm 2011,场景: X_source=N/A. Y_source=SQL server 2008 R2。 Z_source=CRM 2011数据库。 我有一个Y_源,它每天都会以一定的间隔使用X_源中的信息进行更新。完成后,Z_源必须连接到Y_源并上传该信息。我无法控制X&Y源,但知道Y_源将与Z_源位于同一网络上 问题: 因为我知道Y_source中有超过200000条记录,所以我不能调用所有记录并将它们上传到Z_source。我必须找到一种方法,在那里我可以成批或逐个遍历它们。我的想法是使用T-SQL游

场景:
X_source=N/A.
Y_source=SQL server 2008 R2。
Z_source=CRM 2011数据库。

我有一个Y_源,它每天都会以一定的间隔使用
X_源
中的信息进行更新。完成后,
Z_源
必须连接到Y_源并上传该信息。我无法控制X&Y源,但知道
Y_源
将与
Z_源
位于同一网络上

问题:
因为我知道
Y_source
中有超过200000条记录,所以我不能调用所有记录并将它们上传到
Z_source
。我必须找到一种方法,在那里我可以成批或逐个遍历它们。我的想法是使用T-SQL游标,但这似乎是错误的方法

资料来源:
我有Y&Z的地址和凭证。我还可以控制
Z_source

编辑 好的,让我澄清一些我认为可能很重要的事情

  • Z_source
    确实是一个独立于CRM 2011的数据库,但它是其源代码的来源

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

  • 要处理的记录数量将远远超过20万份

  • 有几件事:

  • CRM 2011中的插件类似于SQL触发器。CRM事件,如
    创建
    删除
    更新
    合并
    等,会触发您在插件中编写的代码的执行。这似乎不适合您的情况,因为您希望独立于CRM操作分批执行操作

  • CRM 2011中的任何内容都不是在基于集合的批次中完成的。所有操作都是一次完成一行数据库。(为了证明这一点,请分析您认为应该在一个集合中完成的任何CRM事件,并查看结果SQL。)然而,仅仅因为CRM 2011不能使用基于集合的操作,并不意味着您必须一次一行地收集SQL Server中的所有源数据

  • 因此,我建议如下:

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

    根据您的需要,该应用程序可以成为在SQL Server中计划或触发的CLR存储过程、在服务器上按计划运行的控制台应用程序,或者可以实现上述功能的任何其他应用程序。最近的问题也说明了这一点。

    我不知道您是否习惯SSIS,但我认为它确实可以帮助您

    这里有两个关于它的好帖子:和

    问候,


    Kévin

    我提出的解决方案是创建一个C#console应用程序来连接到
    Y_源代码
    检索数据,然后使用CRM 2011 SDK在:SDK/samplecode/cs/quickstart中使用快速启动应用程序,并将其修改为插入
    Z_源代码
    。此应用程序将在
    Y\u源代码更新6小时后通过Windows任务运行,因此我不需要精确的触发器。

    谢谢您的回复。我今天会研究你的解决方案。谢谢你的回复。凯文今天会研究你的解决方案,尽管看起来和彼得提到的一样。