sql >> データベース >  >> RDS >> Sqlserver

ssisフラットファイルソースの不正な行をスキップする方法

    ソリューションの概要

    これを行うには、Flat File Connection Managerを1つ追加します。 データ型がDT_WSTRの列を1つだけ追加します 長さは4000 (名前がColumn0であると仮定します )-したがって、すべての列は1つの大きな列と見なされます

    • Dataflow task Script Componentを追加します Flat File Sourceの後
    • マークColumn0 入力列として、17個の出力列を追加
    • Input0_ProcessInputRow内 メソッドsplitColumn0 区切り文字で、次に配列の長さが17であるかどうかを確認し、出力列に値を割り当てます。そうでない場合は、行を無視します。

    詳細なソリューション

    1. フラットファイル接続マネージャーを追加し、テキストファイルを選択します
    2. [詳細設定]タブに移動します 、1つの列を除くすべての列を削除します
    3. remianing列のデータ型をDT_WSTRに変更します 長さ=4000

    1. DataFlowタスクを追加する
    2. データフロータスク内に、フラットファイルソース、スクリプトコンポーネント、およびOLEDB宛先を追加します

    1. スクリプトコンポーネントでColumn0を選択します 入力列として

    1. 17個の出力列(最適な出力列)を追加します
    2. OutputBufferを変更します SynchronousInput Noneへのプロパティ

    1. スクリプト言語を選択してVisual Basic

    1. スクリプトエディタで、次のスクリプトを記述します

      Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)
      
          If Not Row.Column0_IsNull AndAlso
                  Not String.IsNullOrEmpty(Row.Column0.Trim) Then
      
      
              Dim strColumns As String() = Row.Column0.Split(CChar(";"))
      
              If strColumns.Length <> 17 Then Exit Sub
      
      
              Output0Buffer.AddRow()
              Output0Buffer.Column = strColumns(0)
              Output0Buffer.Column1 = strColumns(1)
              Output0Buffer.Column2 = strColumns(2)
              Output0Buffer.Column3 = strColumns(3)
              Output0Buffer.Column4 = strColumns(4)
              Output0Buffer.Column5 = strColumns(5)
              Output0Buffer.Column6 = strColumns(6)
              Output0Buffer.Column7 = strColumns(7)
              Output0Buffer.Column8 = strColumns(8)
              Output0Buffer.Column9 = strColumns(9)
              Output0Buffer.Column10 = strColumns(10)
              Output0Buffer.Column11 = strColumns(11)
              Output0Buffer.Column12 = strColumns(12)
              Output0Buffer.Column13 = strColumns(13)
              Output0Buffer.Column14 = strColumns(14)
              Output0Buffer.Column15 = strColumns(15)
              Output0Buffer.Column16 = strColumns(16)
      
          End If
      
      End Sub
      
    2. 出力列を宛先列にマップします



    1. MariaDBでのDATE_SUB()のしくみ

    2. 別のSQLiteOpenHelperクラスの既存のDBに新しいテーブルを作成します

    3. RMANリストバックアップコマンド

    4. Oracle Fast Recovery Area