Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何检查ssis中的列结构?_Sql_Sql Server_Ssis_Etl_Ssis 2012 - Fatal编程技术网

Sql 如何检查ssis中的列结构?

Sql 如何检查ssis中的列结构?,sql,sql-server,ssis,etl,ssis-2012,Sql,Sql Server,Ssis,Etl,Ssis 2012,我的sql server中有一个表客户 列 分配器代码 客户代码 客户名称 客户添加 拉链 电话 dl_数 gstin 我们每月从经销商处收到客户档案。 因此,有时他们发送的文件结构不正确。。例如,可能缺少gstin或dl_编号,或者gstin代替了dl_编号,dl_编号代替了tel……基本上,可以拆分列 当我们用SSIS上传这些平面文件时,会出现错误。如果结构错误,数据不会上传到服务器上 如果缺少列或列放错了位置,我想上传带有空数据的数据 解决方案 根据您的评论,您正在处理平面文件。要解决此问

我的sql server中有一个表客户

  • 分配器代码
  • 客户代码
  • 客户名称
  • 客户添加
  • 拉链
  • 电话
  • dl_数
  • gstin
  • 我们每月从经销商处收到客户档案。 因此,有时他们发送的文件结构不正确。。例如,可能缺少gstin或dl_编号,或者gstin代替了dl_编号,dl_编号代替了tel……基本上,可以拆分列

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

    如果缺少列或列放错了位置,我想上传带有空数据的数据

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

    细节
  • 首先添加平面文件连接管理器
  • 在平面文件连接管理器中,转到“高级”选项卡,删除所有列并仅保留一列(列0)
  • 将列类型更改为DT_WSTR,长度更改为4000
  • 添加
    数据流任务
  • 数据流任务中
    添加平面文件源、脚本组件和OLEDB目标
  • 打开脚本组件,转到“输入/输出”选项卡并添加8个输出列(分发者代码、客户代码、客户名称、客户添加、邮政编码、电话、dl\U编号、gstin)
  • 将脚本语言更改为Visual Basic
  • 在脚本内部编写以下代码

    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
    
  • 将输出列映射到OLEDB目标


  • “我们收到客户文件”-什么类型的文件?这些文件是否有关于它们提供的值的指示?这些文件是由管道“|”分隔符分隔的平面文件。文件内部是否有关于缺少哪些列的指示?单个文件是否可以包含多行,每行缺少不同的列?如果找不到该列,常量是什么?i、 e.如果没有
    cust_add
    列,那么
    cust_add
    变量的值是多少,因此行中的值是多少?@Nick.McDermaid您说得对!代码必须改进。我今晚就去。谢谢你的回答顺便说一句,我从来没有想过这样做