sql-server - 了解脚本组件如何更新数据库中的数据

标签 sql-server ssis

我对 SSIS 中的脚本编写非常陌生,只需要使用它来更新现有表中的值。

也许我采取了错误的方法,因为我发现很少有脚本组件用于此目的的示例。如果有更好的方法在 SQL Server 中按计划、使用详细的业务逻辑更新数据,我更愿意使用标准方法。

但是关于脚本组件,我见过添加列的示例,但没有看到简单更新值的示例。

到目前为止,我已经创建了这个测试脚本来执行最简单的操作:

public override void Input0_ProcessInputRow(Input0Buffer Row)
{
    Row.AutoModel = "123";
}

我运行 SSIS 包。我知道它运行这个方法,因为我在那里放置了一个断点。 SSIS 包成功完成后,我预计数据库中的所有 AutoModel 字段都将变为“123”,但没有任何变化。我还需要做些什么来调用这些更新吗?

最佳答案

SSIS 有两个不同的脚本项,这可能有点令人困惑。脚本任务出现在“控制流设计”选项卡的工具箱中,脚本组件出现在“数据流”选项卡的工具箱中。

在本例中,您使用的是脚本组件,它是一个数据流转换。

数据流通常具有数据源、一个或多个转换以及数据目的地。您想要更新数据库中的记录,而不是插入它们,因此您需要在数据流末尾使用 OLE DB 命令来调用存储过程。

您将编写存储过程来执行所需的更新,并且它需要必要的参数。 OLE DB Command 对象应配置为将数据流中的字段映射到存储过程的参数。

你说“也许我采取了错误的方法”。根据我的经验,脚本组件可能很有用,但最好谨慎使用。也许您的很多处理都可以通过标准组件来处理(例如表查找、条件拆分、派生列和聚合)?

以这种方式使用 SSIS 具有很大的优势。它提供最佳性能。开发和维护速度更快。运行该包时,您可以看到数据流向哪些路径。您可以附加数据查看器来检查数据。

关于sql-server - 了解脚本组件如何更新数据库中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24212423/

相关文章:

ssis - 由于超时而未启动 SSIS 包作业失败

sql-server - 如何使用 SQL 对行重新排序(不交换)

使用 IF 进行 SQL 字符串比较

sql-server-2008 - 还没有Microsoft.SqlServer.ManagedDTS.dll,但是

sql-server - 无法更改 SSIS 转换脚本编辑器中的值

sql - 用于在 Azure 上运行脚本文件的 SSIS 包

java - 大型过滤表的读取和写入时间优化

SQL Server Like 查询不区分大小写

sql-server - 如何获取当前 session 的日期格式

sql-server - SSIS:一个数据流中的多个数据流还是......?