gpt4 book ai didi

sql - 如何检查ssis中的列结构?

转载 作者:行者123 更新时间:2023-12-04 14:43:04 25 4
gpt4 key购买 nike

我的 sql server 中有一个表 customer。

  1. 经销商代码
  2. 客户代码
  3. 客户姓名
  4. cust_add
  5. 压缩
  6. 电话
  7. dl_number
  8. gstin

我们每月从经销商那里收到客户文件。所以有时他们会发送带有错误结构的文件。比如 gstin 丢失或 dl_number 丢失或 gstin 代替 dl_number 而 dl_number 代替 tel ......基本上,列可以拆分..

当我们使用 SSIS 上传这些平面文件时,它会出错......如果结构错误,数据就不会上传到服务器上。

如果列缺失或列错位,我想上传那些包含空数据的数据。

Data Flow in SSIS

最佳答案

解决方案

根据您的评论,您正在处理平面文件。要解决此问题,您必须将所有列作为一列读取并随时检索结构。

详情

  1. 首先添加一个平面文件连接管理器。
  2. 在平面文件连接管理器中,转到“高级”选项卡,删除所有列并仅保留一列(Column0)
  3. 将列类型更改为 DT_WSTR,将长度更改为 4000。
  4. 添加一个数据流任务
  5. Dataflow 任务 中添加一个平面文件源、一个脚本组件和一个 OLEDB 目标。
  6. 打开脚本组件,转到输入/输出选项卡并添加 8 个输出列(Distributer_Code,Cust_code,cust_name,cust_add,zip,tel,dl_number,gstin)
  7. 将脚本语言更改为 Visual Basic。
  8. 在脚本中写入以下代码。

    Dim Distributer_Code as integer = -1
    Dim Cust_code as integer = -1
    Dim cust_name as integer = -1
    Dim cust_add as integer = -1
    Dim zip as integer = -1
    Dim tel as integer = -1
    Dim dl_number as integer = -1
    Dim gstin as integer = -1
    Dim intRowIndex as integer = 0

    Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)

    If intRowIndex = 0 then

    Dim strfields() as string = Row.Column0.split(CChar("|"))
    Dim idx as integer = 0

    For idx = 0 To strFields.length - 1

    Select case str

    Case "Distributer_Code"
    Distributer_Code = idx
    Case "Cust_code"
    Cust_code = idx
    Case "cust_name"
    cust_name = idx
    Case "cust_add"
    cust_add = idx
    Case "zip"
    zip = idx
    Case "tel"
    tel = idx
    Case "dl_number"
    dl_number = idx
    Case "gstin"
    gstin = idx

    End Select

    Next

    Else

    Dim strfields() as string = Row.Column0.split(CChar("|"))

    If Distributer_Code > -1 Then Row.DistributerCode = strfields(Distributer_Code)
    If Cust_code > -1 Then Row.Custcode = strfields(Cust_code)
    If cust_name > -1 Then Row.custname = strfields(cust_name)
    If cust_add > -1 Then Row.custadd = strfields(cust_add)
    If zip > -1 Then Row.zip = strfields(zip)
    If tel > -1 Then Row.tel = strfields(tel)
    If dl_number > -1 Then Row.dlnumber = strfields(dl_number)
    If gstin > -1 Then Row.gstin = strfields(gstin)

    End If


    intRowIndex += 1

    End Sub
  9. 将输出列映射到 OLEDB 目标

关于sql - 如何检查ssis中的列结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53096602/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com