У меня есть задача импортировать данные excel на сервер Sql. Данные excel исходят из шаблонов excel. Существуют различные шаблоны excel для разных кликов, поэтому столбцы в excel не совпадают по всем шаблонам. Данные должны быть импортированы в одну общую таблицу SQl.
Я сделал googled, и в сети было много образцов, но я не могу определить, какой из них лучший.
Могу ли я попросить вас рассказать мне, как достичь вышеуказанного, учитывая динамические столбцы шаблонов.
В шаблоне excel стартовая строка и конечная строка не фиксированы.
Data Flow Task
, основная задача для перемещения данных в пакете SSIS, тесно связана с метаданными поставщика источника. Если у одного источника есть строка, int, строка и следующая строка, строка, строка, строка, метаданные будут слишком разными для этой работы в одном потоке данных. Хотя вы можете принуждать целочисленные данные в строку, разницу в количестве столбцов нельзя преодолеть.
В вашем случае, если у вас есть ужасно сложная бизнес-логика для применения к данным, поступающим из этих электронных таблиц, в консолидированную таблицу, я бы, вероятно, посмотрел на дизайн пакетов N + 1. Пакет для каждого возможного формата Excel, который вы получите. Я предполагаю, что существует некоторая логика для определения того, из какого шаблона был получен файл (ClientAV1.xlsx, ClientBV2.xlsx и т. Д.). Эти пакеты будут иметь поток данных, который был источником Excel для назначения OLE DB. Конечным пакетом будет родительский / контроллер / мастер-пакет. Он будет обрабатывать координацию этих других пакетов на основе доступных файлов.
Поскольку вы отметили asp.net, я предполагаю, что вы тоже хорошо разбираетесь в .NET-подходе. В этом ответе я расскажу о том, как вы можете читать файлы Excel в .NET, и пока я передаю его в поток данных SSIS, ничего не мешает вам выдавать массовые команды для загрузки данных в SQL Server.
Динамическое сопоставление столбцов в SSIS довольно сложно, самый простой метод, когда вам не нужно беспокоиться о сопоставлении столбцов, - это использовать параметр Openrowset для импорта данных из файла Excel в файл sql. Вы можете использовать его в качестве команды и добавить ее в Execute SQL Task:
SELECT * INTO <TableName> FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0','Excel 8.0;Database=C:\Filename.xls', 'SELECT * FROM [Sheet$]')