Как Вы заставляете пакет SSIS только вставлять новые записи при копировании данных между серверами

В VS2005 и VS 2008 Вы видите содержание контейнеров STL. Правила для того, чтобы достигнуть данные находятся в autoexp.dat "c:\Program Files\Microsoft Visual Studio 9\Common7\Packages\Debugger\autoexp.dat".

AutoExp.dat предназначен, чтобы быть настроенным. Однако STL defs находится под разделом по имени [Visualizer]. Если бы можно выяснить язык, используемый в том разделе, большем количестве питания Вам, однако я рекомендовал бы просто оставить ту часть в покое.

Autoexp.dat существовал в VS2003, но не было никакой поддержки контейнеров STL ([Visualizer] не существовал). В VS2003 необходимо вручную переместиться по базовому представлению данных.

Путем изменения autoexp.dat возможно добавить правила для навигации по представлению данных собственных типов, таким образом, их легче отладить. Если Вы делаете это, необходимо только добавить к материалу под [AutoExp]. Будьте осторожны и продолжите заднюю часть этого файла перед изменением его.

6
задан Craig 25 November 2009 в 21:34
поделиться

3 ответа

Ваш пример кажется простым, похоже, вы добавляете только новых людей, а не ищете измененные данные в существующих записях. В этом случае сохраните последний идентификатор в базе данных.

CREATE TABLE dbo.LAST (RW int, LastID Int)
go
INSERT INTO dbo.LAST (RW, LastID) VALUES (1,0)

Теперь вы можете использовать его для вставки последнего идентификатора переданной строки.

UPDATE dbo.LAST SET LastID = @myLastID WHERE RW = 1

При выборе источника OLEDB установите доступ к данным mode в Команда SQL и используйте

DECLARE @Last int
SET @Last = (SELECT LastID FROM dbo.LAST WHERE RW = 1)
SELECT * FROM AlphaPeople WHERE ID > @Last;

Обратите внимание, я предполагаю, что вы используете ID int IDENTITY для своего ПК.

Если вам нужно отслеживать данные изменения существующих записей, затем иметь столбец «последнее изменение» в каждой таблице и сохранять время последней передачи.

другой метод предполагает настройку связанного сервера с бета-версии на альфа-версию и запуск вашего примера без использования SSIS. Я ожидал, что это будет намного медленнее и более ресурсоемко, чем решение SSIS.

 INSERT INTO dbo.BetaPeople
 SELECT * FROM [Alpha].[myDB].[dbo].[AlphaPeople]
 WHERE ID NOT IN (SELECT ID FROM dbo.BetaPeople)
5
ответ дан 8 December 2019 в 17:23
поделиться

Это классическая проблема обнаружения дельты. Лучшее решение - использовать систему отслеживания измененных данных с / без SSIS. Если то, что вы ищете, бывает раз в жизни, не нужно переходить на SSIS. Используйте другие средства, например связанный сервер, и сравните с существующими записями.

2
ответ дан 8 December 2019 в 17:23
поделиться

Самый простой метод, который я использовал, следующий:

  • Запрос Альфы в задаче источника в потоке данных и внесение записей в поток данных.
  • Выполнить любые необходимые преобразования.
  • Перед записью в Destination (Beta) выполните поиск, соответствующий столбцу ID из Alpha в Beta. На первой странице редактора Lookup Transformation убедитесь, что вы выбрали "Перенаправить строки на вывод без совпадения" из выпадающего списка "Укажите, как обрабатывать строки с теперь совпадающими ошибками"
  • Соедините задачу поиска с местом назначения. Это даст вам подсказку, где вы можете указать, что это те несопоставимые строки, которые вы хотите вставить.
4
ответ дан 8 December 2019 в 17:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: