SSIS在資料流工作的指令碼元件,加上RowNumber

SSIS在資料流工作的指令碼元件,加上RowNumber

SSIS在資料流工作的指令碼元件_加上RowNumber

  1. 新增變數Counter
  2. 在「資料流程」 中,新增「指令碼元件」
  3. 在「指令碼元件」 中的「輸入及輸出」 ,按「加入資料行」 按鈕
  4. 新增「RowNumber 」資料行
  5. 「RowNumber 」資料行,DataType設為DT_I4
  6. 在「指令碼元件」 中的「指令碼」 ,按「編寫指令碼」 按鈕
  7. 加入以下指令碼


using System;
using System.Data;
using Microsoft.SqlServer.Dts.Pipeline.Wrapper;
using Microsoft.SqlServer.Dts.Runtime.Wrapper;

[Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute]
public class ScriptMain : UserComponent
{

    private int rowCounter = 0;

    public override void PreExecute()
    {
        base.PreExecute();
        // Lock variable for read 
        VariableDispenser variableDispenser = (VariableDispenser)this.VariableDispenser;
        variableDispenser.LockForRead("User::Counter");

        IDTSVariables100 vars;
        variableDispenser.GetVariables(out vars);

        // Fill the internal variable with the value of the SSIS variable
        rowCounter = (int)vars["User::Counter"].Value;

        // Unlock variable
        vars.Unlock();
    }

    public override void PostExecute()
    {
        base.PostExecute();

         // Lock variable for write
        VariableDispenser variableDispenser = (VariableDispenser)this.VariableDispenser;
        variableDispenser.LockForWrite("User::Counter");
 
        IDTSVariables100 vars;
        variableDispenser.GetVariables(out vars);
 
        // Fill the SSIS variable with the value of the internal variable
        vars["User::Counter"].Value = rowCounter;
 
        // Unlock variable
        vars.Unlock();

    }

    public override void Input0_ProcessInputRow(Input0Buffer Row)
    {
        // Seed counter
        rowCounter++;
        // Fill the new column
        Row.RowNumber = rowCounter;
    }

}