【问题标题】:SSIS - Update error in For each loopSSIS - 每个循环中的更新错误
【发布时间】:2016-11-17 14:06:24
【问题描述】:

我有一些 .txt 文件正在尝试导入到我的 oledb 目的地。 我想在以 .csv 格式提取数据之前对数据进行一些更新。我正在尝试通过 SSIS 实现这一目标。

我有以下流程:

1>执行 sql 任务以截断我现有的表
2>数据流任务将我的平面文件导入到 oledb dest
3>根据我的需要执行sql任务来更新我的数据。
4>数据流任务导出csv文件中的数据。

这里的担忧是: 我有很多这样的文本文件,我想在我的包中使用 for each loop Container, 我的文本文件有供应商明智的数据,例如:tibco.txt,我想从某个位置导入此文件并将其提取到具有相同名称但具有 .csv 扩展名的目标文件夹。 我使用了一个变量来存储每次 for 循环运行时的文件名,并在表达式中设置它:上面第 2 步中使用的输入平面文件的连接字符串。

我的包在第 2 步之前运行良好,但无法在第 3 步更新数据。

错误: [执行 SQL 任务] 错误:执行查询“update tablename set vendor_inventory = r...”失败,出现以下错误:“Invalid column name 'HOSTNAME'.”。可能的失败原因:查询有问题,“ResultSet”属性设置不正确,参数设置不正确,或者连接没有正确建立。

【问题讨论】:

  • tablename 表中是否有HOSTNAME 字段?我认为更多细节可能会有所帮助,例如:文本文件是否全部导入同一个表或不同的表中?
  • @mendosi 是的,里面有这个字段。文本文件一个一个导入到同一个表中。

标签: sql-server ssis


【解决方案1】:

我假设您正在使用一个变量,该变量正在控制流中的某处进行更改,并且没有正确反映到表达式中。

对于文件系统的每个循环,我总是使用 Config 表

表定义

CREATE TABLE [dbo].[tbl_SSIS_InputMapping](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [Conn_Mgr] [varchar](50) NULL,
    [MD_File] [varchar](500) NULL,
    [Input_Path] [varchar](500) NULL,
    [Output_Path] [varchar](500) NULL,
    [Archieve_Path] [varchar](500) NULL,
    [File_Format] [varchar](100) NULL,
    [File_Type] [varchar](50) NULL,
    [Package_Name] [varchar](100) NULL,
    [Active] [char](1) NULL,
    [AttachOutput] [char](1) NULL)

我的文件夹结构如下所示

MainFolder\MetaData
MainFolder\Input
MainFolder\Output

我的配置表看起来像 this

验证包需要元数据文件。因为您可以在处理后移动输入文件。但是下次包启动时,它会查找文件(已移动/删除)并且会失败。

这是一种非常通用的方法,可以根据您的需要进行定制

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-08
    • 2022-11-23
    相关资源
    最近更新 更多