Подход, указанный в статье Toolbox.com, безусловно, будет работать.(Вам нужно добавить другой поток данных, но потоки данных дешевы.)
С другой стороны, поскольку у вас уже есть компонент Script в существующем потоке данных, вы можете использовать его для генерациистроки заголовка и трейлера.
Сначала измените SynchronousInputID выходных данных компонента сценария на None
, чтобы можно было создавать дополнительные строки:
Далееобновите метод ProcessInputRow () и добавьте метод FinishOutputs () в следующем виде:
[Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute]
public class ScriptMain : UserComponent
{
private bool _headerWritten = false;
public override void IncomingRows_ProcessInputRow(IncomingRowsBuffer Row)
{
if (!_headerWritten)
{
// Code to write the header row goes here
_headerWritten = true;
}
OutgoingRowsBuffer.AddRow();
// do whatever other processing you need for this row of input
}
public override void FinishOutputs()
{
base.FinishOutputs();
// Code to write the footer row goes here
}
}
Этот подход требует немного больше кода, но позволяет вам делать все за один проход, что для достаточно больших файлов может бытьважный.(С другой стороны, таблица Excel не должна быть такой большой ...)