Sql server SSIS合并联接以更新或删除永久锁定的行
我根据这篇博文创建了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 它运行良好,记录很少。但是,当检测到大量更新和删除行时(千行或几十万行)。它运行非常慢,目标表被锁定,作业从未完成。另一件事,这种方法逐行删除和更新 在这
- 插入行: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精简。祝你好运