Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 调用远程存储过程以高效地返回表_Sql Server_Stored Procedures - Fatal编程技术网

Sql server 调用远程存储过程以高效地返回表

Sql server 调用远程存储过程以高效地返回表,sql-server,stored-procedures,Sql Server,Stored Procedures,我有一个SSIS导入过程,在该过程中,我需要通过链接服务器对目标CRM联系人表中的联系人记录进行重复数据消除 目前,我已经创建了一个本地标量函数来完成这项工作,但效率非常低。我通过链接服务器使用指向CRM表的同义词从导入文件和本地函数中传入相关条件(名字、姓氏、邮政编码、电子邮件等),执行一些复杂的逻辑以确定联系人是否匹配,如果匹配,则返回相关的联系人ID。它在导入中每行执行此操作-可以是10条记录或10000条记录 我认为最好的方法是在CRM目标数据库上创建一个存储过程,并通过导入传入一个包含

我有一个SSIS导入过程,在该过程中,我需要通过链接服务器对目标CRM联系人表中的联系人记录进行重复数据消除

目前,我已经创建了一个本地标量函数来完成这项工作,但效率非常低。我通过链接服务器使用指向CRM表的同义词从导入文件和本地函数中传入相关条件(名字、姓氏、邮政编码、电子邮件等),执行一些复杂的逻辑以确定联系人是否匹配,如果匹配,则返回相关的
联系人ID
。它在导入中每行执行此操作-可以是10条记录或10000条记录

我认为最好的方法是在CRM目标数据库上创建一个存储过程,并通过导入传入一个包含相关联系人值的表,在本地执行复杂逻辑并在本地返回结果

我还没有这样做,但我知道我可以将一个值表传递给存储过程,但由于我们不会有一个从CRM到本地的链接服务器,返回多个结果的最佳方式是什么?使用SQL Server 2012;如有必要,我可以使用SQL Server 2014


提前感谢。

让SP位于CRM的本地应该可以大大减少延迟!我经常这样做的一种方法是用我想要处理的数据传递XML(作为VARCHAR)。从ETL服务器调用SP,并让SP在完成时返回一个状态变量。如果您需要传回数据,您可以再次使用XML,或者您可以在CRM服务器上有一个暂存位置,链接服务器知道从何处进行查询。您是否考虑过使用?这可以将匹配/不匹配的记录传送到不同的位置。我想我可能必须按照Matt的建议在target创建一个表。无法使用查找转换,因为我本身并没有进行查找,而是使用源文件中的值来确定是否基于复杂逻辑找到了记录匹配,ie如果lastname匹配&电子邮件匹配&标题匹配,然后找到,但如果标题匹配&电子邮件匹配但lastname不匹配,则尝试对firstname进行匹配,依此类推。让SP位于CRM本地,应该可以大大减少延迟!我经常这样做的一种方法是用我想要处理的数据传递XML(作为VARCHAR)。从ETL服务器调用SP,并让SP在完成时返回一个状态变量。如果您需要传回数据,您可以再次使用XML,或者您可以在CRM服务器上有一个暂存位置,链接服务器知道从何处进行查询。您是否考虑过使用?这可以将匹配/不匹配的记录传送到不同的位置。我想我可能必须按照Matt的建议在target创建一个表。无法使用查找转换,因为我本身并没有进行查找,而是使用源文件中的值来确定是否基于复杂逻辑找到了记录匹配,即如果lastname匹配&电子邮件匹配&然后找到了标题匹配,但如果标题匹配&电子邮件匹配但lastname不匹配,则尝试对firstname进行匹配,依此类推。