方案:
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
。
编辑 好吧,让我清楚一些我认为可能很重要的事情。:
Z_source
确实是一个与CRM 2011分开的数据库,但它是它的来源。
此外,更新Z_source
的流程可以是CRM 2011中的外部流程。这意味着只要数据库更新,CRM是否会触发更新无关紧要。
要处理的记录数量将超过200,000。
答案 0 :(得分:1)
我不知道你是否习惯了SSIS,但我认为它真的可以帮到你!
以下是关于它的两篇不错的帖子:http://gotcrm.blogspot.be/2012/07/crm-2011-data-import-export-using-cozy.html和http://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)
一些事情:
CRM 2011中的插件类似于SQL触发器。 CRM事件,例如Create
,Delete
,Update
,Merge
等,触发执行您编写的代码插入。这似乎不适合您的情况,因为您希望独立于CRM操作分批进行操作。
CRM 2011中的任何内容都不是基于集合的批处理。一切都是一次完成一个数据库行。 (为了证明这一点,请描述您认为应该在一个集合中完成的任何CRM事件并查看生成的SQL。)但是,仅仅因为CRM 2011不能使用基于集合的操作并不意味着您必须收集所有SQL Server中的源数据一次一行。
所以我建议如下:
.ToList()
以将结果集放在内存中。Create
,Update
,Delete
等。
Y-Source
同步时知道是删除还是更新记录。Y-Source
更新时运行。根据您的需要,应用程序可以成为在SQL Server中调度或触发的CLR存储过程,在服务器上按计划运行的控制台应用程序,或其他任何可以完成上述操作的应用程序。最近的问题Schedule workflows via external tool也说明了这一点。