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
Sql server SSIS合并联接以更新或删除永久锁定的行_Sql Server_Ssis - Fatal编程技术网

Sql server SSIS合并联接以更新或删除永久锁定的行

Sql server SSIS合并联接以更新或删除永久锁定的行,sql-server,ssis,Sql Server,Ssis,我根据这篇博文创建了ssis包,用于在两个表之间传输数据 插入行:not isnull(源id)和isnull(目标id) 删除行:isnull(源\u id)和notisnull(目标\u id) 更新行:source\u id=dest\u id和source\u row\u version dest\u row\u version 它运行良好,记录很少。但是,当检测到大量更新和删除行时(千行或几十万行)。它运行非常慢,目标表被锁定,作业从未完成。另一件事,这种方法逐行删除和更新 在这

我根据这篇博文创建了ssis包,用于在两个表之间传输数据

  • 插入行:not isnull(源id)和isnull(目标id)
  • 删除行:isnull(源\u id)和notisnull(目标\u id)
  • 更新行:source\u id=dest\u id和source\u row\u version dest\u row\u version
它运行良好,记录很少。但是,当检测到大量更新和删除行时(千行或几十万行)。它运行非常慢,目标表被锁定,作业从未完成。另一件事,这种方法逐行删除和更新


在这种情况下,你能帮我克服桌子锁吗。是否有任何方法可以更新或删除一批行,而不是逐行进行更新或删除?

使用暂存区域,并使用执行SQL任务来运行SQL或执行存储过程来执行基于暂存区域与目标的批量操作


我意识到,如果您希望在SSIS中完成所有工作,但使用阻塞转换()和逐行OLE命令转换通常无法很好地扩展到大量数据,那么这不是一个非常令人满意的答案。

同意。不要用那种模式。两个问题。首先,OLEDB命令每行进行一次数据库往返。非常慢。其次,我们有两个OLEDB命令往返于同一个表。锁在中央。正如Jo所建议的,用oledb目标替换那些oledb命令。绑定这些目标以删除和更新临时表。然后,在控制流上,在这个数据流之后,添加两个executesql命令。一个从阶段更新,另一个从阶段删除。这会快得多。同样在数据流之前,添加TRUNCATE stage table命令以保持stage精简。祝你好运