Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.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
C# 如何在SSIS数据流中将表作为存储过程参数传递_C#_Ssis_Bids - Fatal编程技术网

C# 如何在SSIS数据流中将表作为存储过程参数传递

C# 如何在SSIS数据流中将表作为存储过程参数传递,c#,ssis,bids,C#,Ssis,Bids,我正在尝试编写一个SSIS包来将数据从一个数据库传输到另一个数据库(直接拷贝,我传输到的表和从中传输的表具有相同的结构)。我正在选择记录的子集(自上次运行包以来创建或修改的记录),并尝试将它们转储到目标数据库上的存储过程中,该存储过程将确定哪些记录需要更新,哪些记录需要插入 如何在数据流对象内部执行此操作,或者将记录从对象中转移出来,以便使用执行SQL任务执行此操作 我不想使用OLEDB命令,因为它一次只能处理一条记录。这两个数据库位于不同位置的不同机器上,我希望这个包运行时间尽可能短,因为我编

我正在尝试编写一个SSIS包来将数据从一个数据库传输到另一个数据库(直接拷贝,我传输到的表和从中传输的表具有相同的结构)。我正在选择记录的子集(自上次运行包以来创建或修改的记录),并尝试将它们转储到目标数据库上的存储过程中,该存储过程将确定哪些记录需要更新,哪些记录需要插入

如何在数据流对象内部执行此操作,或者将记录从对象中转移出来,以便使用执行SQL任务执行此操作


我不想使用OLEDB命令,因为它一次只能处理一条记录。这两个数据库位于不同位置的不同机器上,我希望这个包运行时间尽可能短,因为我编写它是为了替换一个运行时间太长的DTS包(它删除目标表的全部内容,并对所有更改或其他内容重新复制)SSIS不支持表值参数。对于您试图实现的目标,有几种变通方法:

  • 有几个第三方上传/合并目的地,包括CodePlex上的这个目的地
  • 您可以使用OLEDB目标将行插入服务器上的临时表中,然后通过执行SQL任务针对临时表运行存储过程。(这就是我们在我当前项目中所做的)
  • 您可以编写自定义的.NET脚本目标
  • 您可以使用查找转换查看它们是否存在于表中,然后插入不存在的行并对其他行运行OLEDB命令,这至少比对每一行运行OLEDB命令要好

您是否考虑过使用SQL复制从源数据库更新远程数据库?如果源表已定义(或可以轻松更新为定义)主键且非常可靠,则应更易于设置。使用查找转换,但将更改的行路由到临时表,并在数据流之后在执行SQL任务中执行更新。此模式允许您避免OLEDB命令带来的RBAR痛苦。