SSIS在資料流工作的指令碼元件,加上RowNumber
- 新增變數Counter
- 在「資料流程」 中,新增「指令碼元件」
- 在「指令碼元件」 中的「輸入及輸出」 ,按「加入資料行」 按鈕
- 新增「RowNumber 」資料行
- 「RowNumber 」資料行,DataType設為DT_I4
- 在「指令碼元件」 中的「指令碼」 ,按「編寫指令碼」 按鈕
- 加入以下指令碼
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;
}
}