SSIS — сравнение Excel с базой данных

У меня есть база данных SQL Server 2008 R2, в которой у меня есть несколько таблиц. Я буду получать новые данные, а также обновления данных для этих таблиц ежедневно или еженедельно в формате файла Excel. Я использую SSIS для загрузки файлов excel в промежуточную таблицу, а затем сравниваю записи этой промежуточной таблицы с главной таблицей, чтобы найти изменения (потому что мне нужно выполнить некоторые проверки перед обновлением изменений)

Есть ли способ в SSIS сравнить записи файла excel напрямую с главной таблицей? т.е. без сохранения их в промежуточной таблице


person Jayasurya Satheesh    schedule 14.12.2017    source источник
comment
Есть причины для этого?   -  person Rawitas Krungkaew    schedule 14.12.2017
comment
Я хочу избежать необходимости в дополнительной таблице, а также уменьшить количество обращений к БД.   -  person Jayasurya Satheesh    schedule 14.12.2017
comment
Создайте временные таблицы в SSIS и сравните их с таблицей фактов в базе данных. Всегда рекомендуется загружать данные в промежуточную таблицу, так как вы можете получить записи для любого несоответствия.   -  person Ven    schedule 14.12.2017
comment
как мне этого добиться? можете ли вы привести несколько примеров @BHouse   -  person Jayasurya Satheesh    schedule 14.12.2017
comment
@JayasuryaSatheesh, вы можете добиться этого с помощью T-SQL или с помощью объединения слиянием или преобразования поиска из SSIS, проверьте мой ответ для получения дополнительной информации.   -  person Hadi    schedule 02.01.2018
comment
@JayasuryaSatheesh проблема решена?   -  person Hadi    schedule 03.01.2018
comment
Нет, я застрял с некоторыми другими проблемами Priority.   -  person Jayasurya Satheesh    schedule 03.01.2018
comment
@JayasuryaSatheesh, вы можете добиться этого, используя OPENROWSET в операторе SQL   -  person Yahfoufi    schedule 22.01.2018


Ответы (2)


Использование T-SQL

Вы можете использовать функцию OPENROWSET() в запросе для чтения данных из Excel, и вы можете присоединиться к ней с таблицей SQL без необходимости использования промежуточных таблиц.

Пример запроса

SELECT * FROM AmenityData As a
INNER JOIN  TypesToGroups As b
ON a.ClassCode =  b.FacilityTypeID
INNER JOIN Groups As c
ON b.GroupID = c.GroupID
INNER JOIN  OPENROWSET ('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;Database=C:\postaldistricts.xls;HDR=YES', 'SELECT *    FROM [Sheet1$]') As d
ON d.[PostalDistricts] = a.[PostalDistrict]

Вы можете обратиться к следующим ссылкам для получения дополнительной информации:

Примечание. Существуют и другие методы, такие как OPENDATASOURCE() или OPENQUERY(), или создание связанного сервера, но я попробовал OPENROWSET(). Вы можете найти дополнительную информацию об этих методах по ссылкам, которые я предоставил


Использование служб SSIS

Использование слияния

В SSIS вы можете создать использование Merge Join для выполнения операций LEFT JOIN и INNER JOIN.

Для получения дополнительной информации обратитесь к моему ответу по адресу Как результат Intersect и Except в службах SSIS

Использование преобразования поиска

Или вы можете использовать преобразования «Уточняющий запрос» для выполнения объединений (объединение слиянием имеет более высокую производительность при объединении), просто перейдите по следующей ссылке:

person Hadi    schedule 30.12.2017
comment
У меня есть 2 таблицы. 1 находится на сервере Sql, а другая - в Oracle, и теперь я хочу сравнить записи этих 2 таблиц на основе объединения 2 столбцов, а затем выполнить сравнение 1 или более столбцов. Что мне нужно делать в SSIS? - person Learning-Overthinker-Confused; 06.02.2018
comment
Вы можете создать связанный сервер для базы данных оракула с сервера sql, а затем использовать простой запрос на соединение - person Hadi; 06.02.2018
comment
Или вы можете использовать преобразование объединения слиянием или поиск, чтобы добиться этого из SSIS. - person Hadi; 06.02.2018
comment
Если я использую преобразование поиска и если мои исходные и целевые данные неупорядочены, то как преобразование поиска будет работать в этом случае, учитывая, что источник и цель имеют 20 миллионов данных? - person Learning-Overthinker-Confused; 06.02.2018
comment
@Learning-Overthinker-Confused Преобразование «Уточняющий запрос» не требует упорядочения, но требует объединения слиянием. - person Hadi; 06.02.2018
comment
@Learning-Overthinker-Confused В вашем случае я не думаю, что есть оптимальное решение, вы должны попробовать и оценить каждый метод и, наконец, выбрать тот, который соответствует вашим требованиям. - person Hadi; 06.02.2018

Вы можете рассмотреть возможность выполнения UPSERT (обновить существующие/вставить новые). Совпадения вставляются, а несовпадения перенаправляются в другое место.

http://rad.pasfu.com/index.php?/archives/46-SSIS-Upsert-With-Lookup-Transform.html

person ASH    schedule 14.12.2017
comment
Меня не беспокоит вставка, мне нужен способ аудита обновленных записей без использования промежуточной промежуточной таблицы. - person Jayasurya Satheesh; 15.12.2017