Импорт данных SQL Server

Мы проектируем импорт данных из внешнего источника, такого как MAS200, в нашу производственную базу данных SQL Server 2005/2008. Источником будет транзакционная база данных, безопасная / изолированная. Нам нужно синхронизировать нашу базу данных с источником, чтобы обеспечить периодическую синхронизацию данных.

Нам предоставляется возможность запрашивать любой тип исходных данных - например, в форме CSV, текстовых файлов или даже иметь исходные данные в другой базе данных SQL, которая имеет аналогичную структуру. Нам нужно выбрать лучший способ импорта данных - он будет периодическим и может выполняться ежечасно или ежечасно.

Исходя из моего опыта, я считаю, что наличие исходных данных в базе данных SQL может быть лучшим способом для начала. Вот приблизительный дизайн того, что мы получили до сих пор -

  1. Периодически источник БД будет заполняться извне (не наша часть)
  2. Предварительная обработка: полировка данных исходной таблицы (т. Е. Обрезка, поиск) - общее форматирование и преобразование данных
  3. Fetch: Создать CURSOR для циклического просмотра записей. Мы планируем обновить существующие данные и вставить новые, поэтому нам нужно по крайней мере два цикла CURSOR один за другим.
  4. Заполнить: в цикле CURSOR записи будут обновляться / вставляться
  5. Постобработка: снова некоторые последние штрихи и отображение поиска (т. Е. Замена кода на id)
  6. Проверка: Наконец, запустите проверку согласованности таблиц, чтобы обеспечить целостность импортируемых данных

Подводя итог, мы собираемся разбить шаги в хранимых процедурах, а затем создать задание SQL, которое будет следовать этим шагам один за другим. Я знаю, что есть много способов сделать это, SSIS, Мастер импорта данных и т. Д., Но мы должны сделать его достаточно простым, легко переносимым, менее зависимым и гибким для будущих изменений.

ПРИМЕЧАНИЕ: данные будут огромными - в прошлый раз у нас была похожая настройка, для завершения всего процесса импорта данных потребовалось несколько минут, например, 20-25 минут, поэтому мы запланировали почасовой импорт данных.

Спасибо.


ОБНОВЛЕНИЕ № 1: Я понимаю, что использование команды MERGE кажется лучшим. Но если я должен создать его для SQL Server 2005? Я считаю, что это работает с 2008 года. Я нашел ссылку -

http://sqlserver-tips.blogspot.com/2006/09/mimicking-merge-statement-in-sql.html

Есть другие идеи на 2005 год?

3 ответа

Решение

Для пунктов 3 и 4 - если вы используете SQL Server 2008, рассмотрите возможность использования команды MERGE, а не курсоров и циклов

Если возможно, сохраните нетронутую копию исходной базы данных, а затем, если возникнут какие-либо проблемы с обработкой данных, вам будет легче отследить причину.

Рассматривали ли вы использование служб интеграции SQL Server? Похоже, ваш проект идеально подходит для этого.

Недавно я работал над проектом, который извлекал данные из различных источников данных (как баз данных, так и файлов), собирал их, очищал и затем помещал в реляционную базу данных SQL Server 2008. Это было довольно просто в SSIS.

Как уже говорили другие, нет необходимости использовать курсор в этом процессе; Я также согласен с тем, что SSIS, вероятно, лучше подходит для этого, чем вы думаете (потому что он переносимый и настраиваемый). Однако, если вы хотите сделать это в T-SQL, я бы посоветовал вам заменить шаг FETCH на что-то вроде:

  1. Извлеките данные из промежуточной таблицы, которую вы использовали для полировки своих данных.
  2. Если вы не можете использовать команду MERGE в SQL 2008, вы можете эмулировать то же самое с помощью JOIN:

    - Стрелки должны быть обновлены. SELECT * FROM staging JOIN

    - Стрелки, которые нужно вставить. SELECT * FROM staging JOIN

Легко peasy, без курсоров.

Другие вопросы по тегам