我对 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/