【问题标题】:Update or insert using SSIS使用 SSIS 更新或插入
【发布时间】:2018-10-11 00:27:10
【问题描述】:

我有一种情况,我需要使用以下条件更新或插入我的目标表。如果我的目标表中的字段(TYPE)具有值“z”,那么我需要使用源表更新目标。否则我需要在目标中插入带有 TYPE = 'z' 的源条目。我只能使用 ssis 来执行此任务(严格没有存储过程)。请让我知道我该怎么做?

数据流任务 [OLEDB 命令 [189]] 出错:ssis 错误代码 DTS_E_OLEDBERROR。发生了 oledb 错误。错误代码 0x80004005 . 有一条 oledb 记录可用。源 Microsoft SQL 服务器本机 cliemt 11.0 Hresult =0x80004005 描述:存储过程 sp_describe_undeclared_pa​​rameters 不存在或不受支持

更新中使用的代码:

UPDATE Table SET Column=? WHERE TYPE = 'Z'

我也尝试使用脚本组件来更新,因为我是 c# 的新手,谁能指导我如何在 c#script 中做到这一点。

提前致谢

【问题讨论】:

  • 你试过什么?你的包裹现在是什么样子的?您希望为多少条记录执行此操作?您基本上需要使用条件拆分来拆分更新和插入行。您的插入行转到标准目的地。您的更新行转到执行 SQL 目标。我会在这个网站上找到众多答案之一并链接到它
  • 我找不到一个很好的例子。你需要打开 Visual Studio,创建一个包,创建一个数据流。在数据流内部,定义一个源。通过条件拆分来馈送该源。在那个分裂中,你把你的 TYPE='Z' 逻辑。这会将数据分成两个输出。数据输出之一进入标准数据流目的地(插入)。另一个进入SSIS OLE DB Command,这是一个使用参数的更新语句。请这样做,当您遇到问题时,张贴您的包裹图片并清楚地解释问题。现在你真的没有问题
  • 查找转换是您正在寻找的。文章中的以下示例应该对您有所帮助:rad.pasfu.com/index.php?/archives/…
  • 重读您的问题。是的,您需要使用查找转换而不是条件拆分。没关系,因为这看起来现在被放弃了
  • 你为什么不试试我在评论中提到的,而是使用查找而不是条件分割

标签: c# visual-studio-2015 ssis azure-sqldw


【解决方案1】:

难道不能使用CTASRENAME 然后删除初始表吗?插入操作将是串行的,CTAS 将利用平台并并行运行。 RENAME(s) 和 drop 将是快速元操作。像 RENAME 这样的 DDL 不能在事务中。

【讨论】:

  • 您可以做得比重命名表更好。按照您的建议,CTAS,Allan,然后使用这个最近的变体:ALTER TABLE SWITCH TO WITH (TRUNCATE_TARGET=ON)。保留您的表格和元数据。
  • 我的来源在不同的数据库中,我的目的地在不同的数据库中。如果从源表创建 CTAS,我无法在目标数据库中使用它来更新。显示如下错误:Msg 40515, Level 15, State 1, Line 2 此版本的 SQL Server 不支持对“Source_Table”中的数据库和/或服务器名称的引用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-28
  • 1970-01-01
  • 1970-01-01
  • 2011-05-21
  • 1970-01-01
相关资源
最近更新 更多