Я бы избегал писать Script Destination и использовать только Script Transform + Flat File Destination. Таким образом, вы концентрируетесь на логическом выходе (строках данных), позволяя SSIS делать фактическую запись в файл (это может быть немного более эффективно, плюс вы концентрируетесь на своем бизнесе, а не на записи в файлы).
Во-первых, вам необходимо получить денормализованные данные. Вы можете делать соединения и сортировки в СУБД, но если вы не хотите слишком сильно нажимать на СУБД, просто удалите из нее отсортированные данные и слейте их, используя два преобразования SSIS Merge Join.
Затем выполните сценарий: сохраните текущие значения текущего клиента и счета-фактуры, выведите их при их изменении, выведите InvoiceRow на каждый вход. Что-то вроде этого:
if (this.CustomerID != InputBuffer.CustomerID) {
this.CustomerID = InputBuffer.CustomerID;
OutputBuffer.AddRow();
OutputBuffer.OutputColumn = "Customer: " + InputBuffer.CustomerID + " " + InputBuffer.CustomerName;
}
// repeat the same code for Invoice
OutputBuffer.AddRow();
OutputBuffer.OutputColumn = "InvoiceRow: " + InputBuffer.InvoiceRowPrice;
Наконец, добавьте Flat Destination File с одной колонкой (OutputColumn с помощью скрипта), чтобы записать его в файл.
Как получить правильный порядок строк на выходе? Первый клиент; его счета-фактуры и их ряды. Следующий клиент, его счета и так далее. – idstam 2008-10-17 19:46:06