#sql-server-2008 #ssis
#sql-server-2008 #ssis
Вопрос:
У меня есть компонент потока данных, состоящий из следующего :
1.) Прочитайте файл Excel
2.) «Компонент преобразования скрипта»
3.) Запись в плоский файл
Все работает нормально, однако я пытался добавить верхний и нижний колонтитулы.
Как верхний, так и нижний колонтитулы являются пользовательскими и должны быть получены на основе данных в файле.
Я могу открыть файл на C # и написать низкоуровневый код, но это кажется довольно распространенной задачей, и я думал, что будет что-то общее.
Дайте мне знать, если кто-то это сделал.
Комментарии:
1. Нашел это, кажется, правильный подход, хотел бы подтвердить — database.ittoolbox.com/groups/technical-functional/sql-server-l /…
2. Из любопытства, какие данные в файле необходимо добавить в верхний / нижний колонтитул? Такие вещи, как контрольные суммы, общие суммы и т.д.?
3. да, суммирование данных и ввод данных путем чтения из другого диспетчера соединений.
Ответ №1:
Подход, указанный в Toolbox.com статья, безусловно, сработает. (Вам нужно будет добавить другой поток данных, но потоки данных дешевы.)
С другой стороны, поскольку у вас уже есть компонент сценария в вашем существующем потоке данных, вы можете использовать его для создания строк заголовка и концовки.
Сначала измените 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 не должна быть такой большой …)
Комментарии:
1. Спасибо Эдмунд. Позвольте мне проверить это! Также вы имели в виду — «но потоки данных недешевы»?
2. Мой комментарий «но потоки данных дешевы» был на самом деле серьезным — при условии, конечно, что входной файл не огромен. У меня нет хорошего эмпирического правила относительно того, насколько большим должен быть файл, прежде чем возникнет проблема, потому что это зависит и от других факторов, но это то, что я учитываю, когда сталкиваюсь с задачей ускорить медленный процесс. Тем временем, рад помочь!