Предложение для массового импорта данных

8

Мы работаем над проектом, который требует ежедневного импорта данных из электронной таблицы Excel. Данные будут импортированы из предопределенного шаблона и, что мы думаем, сначала мы загрузим данные во временную таблицу и выполним операцию очистки (удаление ненужной информации, добавление новых строк в родительскую таблицу и получение их FK и т. Д.).

  • Мне нужно знать, есть ли какой-либо инструмент или утилита, которая может уменьшить наши усилия.
  • Каков наилучший способ вставки массовых записей из разных источников (в основном из таблиц Excel)?
kodvavi
источник
Приложение, которое мы собираемся создать, является веб-приложением, в котором пользователь имеет ограниченный контроль над сервером SQL. Пользователь загрузит файл через браузер, а остальная часть операции будет выполнена на стороне сервера.
Кодвави

Ответы:

9

SSIS - способ пойти на это. Если вы никогда ранее не создавали пакет и знаете, что ваши исходные файлы (читайте также: электронные таблицы) всегда будут одинаковыми, вы можете использовать мастер импорта / экспорта SQL Server. В SSMS щелкните правой кнопкой мыши базу данных и выберите Задачи> Импорт (или экспорт) данных ...

Откроется мастер, который проведет вас по шагам выбора файлов источника / назначения, а также таблиц назначения (может создавать таблицы, если они еще не существуют). Вы должны будете указать, какие столбцы куда, но мастер довольно прост. Когда вы закончите, он попросит вас запустить или сохранить пакет (или сделать оба). Сохраните пакет. Это сохранит ваш пакет в формате .dtsx, если вы решите сохранить его в файловой системе. Другой вариант - сохранить пакет в самом SQL Server, который затем сохранит их в системной базе данных msdb.

После сохранения пакета вы можете создать задание агента SQL для периодического запуска этого пакета (вы указываете расписание), чтобы вы всегда могли загрузить свои таблицы с помощью служб SSIS. Если вы хотите узнать больше о SSIS, посетите бесплатные вебинары моей компании (мы рассмотрим весь стек BI) на PragmaticWorks

SQLChicken
источник
На самом деле мы создаем веб-приложение, поэтому мы не разрешим пользователю напрямую обращаться к интерфейсу базы данных. Наше приложение сначала импортирует файл, а затем мы выполняем оставшуюся часть операции через наше приложение.
Кодвави
1
@kodvavi; Вы можете вызывать пакеты
служб
1
@kodvavi, я не уверен, что ты имеешь в виду под этим утверждением. В любом случае, веб-приложения обычно не выполняют инициализацию загрузки данных, так почему это имеет значение? Часть ETL базы данных и интерфейс веб-приложения - это две разные вещи.
SQLChicken
Я знаю, что многие люди запускают пакеты служб SSIS из Интернета, но мне кажется, что это плохая идея, учитывая, что многое может пойти не так с источниками Excel.
Nick.McDermaid
5

Вот один пример того, как импортировать данные из Excel в SQL Server. Одна из основных проблем - убедиться, что вы используете компонент преобразования данных между Excel и SQL Server и выполняете преобразование из NVARCHAR в VARCHAR, так как Excel обрабатывает данные как NVARCHAR.

http://www.mssqltips.com/tip.asp?tip=1393

Санкар Редди
источник
nvarchar хорошо с нами, потому что наша база данных будет поддерживать многоязычные атрибуты. Я рассматриваю темы. спасибо
Кодвави
0

Я не отказался бы от чего-либо mr. gbn,Sankar Reddy,SQLChicken. Но я хотел бы сказать, что существует простой способ импортировать таблицу Excel в SQL с помощью «OPENROWSET» TSQL.

Например, чтобы импортировать userлист Excel в TestDBбазе данных. Предположим, что я уже создал [user]таблицу в TestDBбазе данных. Тогда простой openrowset TSQL будет упомянут ниже

Use TestDB;
    Go
    select * INTO [User]
    from openrowset('MICROSOFT.ACE.OLEDB.12.0',
    'Excel 12.0; Database=C:\TestFolder\User.xlsx; HDR=yes; IMEX=1',
    'select * from [User$]');
    Go

Примечание. Я пишу этот TSQL в среде SQL Server 2012. Для каждого SQL сервера openrowset OLEDBпровайдер будет разным. Пожалуйста, проверьте OLEDBссылку сервер-> поставщик поддерживается для этой версии сервера SQL. В моем случае это так ACE.OLEDB.12.0. Перед импортом убедитесь, что Allow inprocessпроверено или нет этого MICROSOFT.ACE.OLEDB.12.0провайдера. Это надо так проверять введите описание изображения здесь

Примечание: - Испытано в производственной среде. Но в вашем случае без тестирования в тестовой среде. Не запускайте напрямую в производственной среде.

Г-н Хайдар Али Хан
источник