0

设想:
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.

问题:
由于我知道有超过 200,000 条记录,Y_source我不能只调用所有记录并将它们上传到Z_source. 我必须找到一种方法,可以分批或逐个迭代它们。我的想法是使用 T-SQL 游标,但这似乎是错误的方法。

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

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

  1. Z_source确实是一个独立于 CRM 2011 的数据库,但它是它的来源。

  2. 更新过程也Z_source可以是 CRM 2011 的外部过程。这意味着只要数据库更新,CRM 是否触发更新都没有关系。

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

4

3 回答 3

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

问候,

凯文

于 2012-08-01T13:24:19.653 回答
1

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

于 2012-08-06T14:34:49.147 回答
0

一些东西:

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

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

所以我推荐以下内容:

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

根据您的需要,该应用程序可以成为在 SQL Server 中计划或触发的 CLR 存储过程、在服务器上按计划运行的控制台应用程序,或任何其他可以完成上述任务的东西。最近的问题通过外部工具安排工作流程也说明了这一点。

于 2012-08-01T11:29:02.330 回答