Prawdopodobnie znalazłeś już odpowiedź na swoje pytanie. Ta odpowiedź ma pomóc innym, którzy mogą natknąć się na to pytanie. Oto możliwa opcja, której można użyć do rozwiązania transferu danych za pomocą SSIS. Założyłem, że nadal możesz tworzyć parametry połączenia wskazujące oba serwery A i B z pakietu SSIS. Jeśli to założenie jest błędne, daj mi znać, abym mógł usunąć tę odpowiedź. W tym przykładzie używam SQL Server 2008 R2
jako zaplecze. Ponieważ nie mam dwóch serwerów, utworzyłem dwie identyczne tabele w różnych Schemas
SerwerA i SerwerB .
Proces krok po kroku:
-
W
Connection manager
sekcji SSIS, utwórz dwa połączenia OLE DB, a mianowicie ServerA i SerwerB . Ten przykład wskazuje na ten sam serwer, ale w Twoim scenariuszu połączenia będą musiały wskazywać na dwa różne serwery. Zobacz zrzut ekranu nr 1 . -
Utwórz dwa schematy
ServerA
iServerB
. Utwórz tabelędbo.ItemInfo
w obu schematach. Tworzenie skryptów dla tych tabel znajduje się w sekcji Skrypty Sekcja. Ponownie, te obiekty są tylko dla tego przykładu. -
Obie tabele wypełniłem przykładowymi danymi. Tabela
ServerA.ItemInfo
zawiera2,222 rows
i tabelaServerB.ItemInfo
zawiera10,000 rows
. Zgodnie z pytaniem brakujące 7778 wiersze powinny być przeniesione zServerB
naServerA
. Zobacz zrzut ekranu #2 . -
Na karcie przepływu kontroli pakietu SSIS umieść zadanie przepływu danych, jak pokazano na zrzucie ekranu #3 .
-
Kliknij dwukrotnie zadanie przepływu danych, aby przejść do karty przepływu danych i skonfigurować zadanie przepływu danych w sposób opisany poniżej. Serwer B jest
OLE DB Source
; Znajdź rekord na serwerze A jestLookup transformation task
i Serwer A jestOLE DB Destination
. -
Skonfiguruj
OLE DB Source
Serwer B jak pokazano na zrzutach ekranu #4 i #5 . -
Skonfiguruj
Lookup transformation task
Znajdź rekord na serwerze A jak pokazano na zrzutach ekranu #6 - #8 . W tym przykładzie ItemId jest unikalnym kluczem. Stąd jest to kolumna służąca do wyszukiwania brakujących rekordów między dwiema tabelami. Ponieważ potrzebujemy tylko wierszy, które nie istnieją na Serwerze A , musimy wybrać opcjęRedirect rows to no match output
. -
Umieść
OLE DB Destination
w zadaniu przepływu danych. Kiedy połączysz zadanie transformacji Lookup z miejscem docelowym OLE DB, zostaniesz poproszony oInput Output Selection
dialog. WybierzLookup No Match Output
z okna dialogowego, jak pokazano na zrzucie ekranu #9 . SkonfigurujOLE DB Destination
Serwer A jak pokazano na zrzutach ekranu #10 i #11 . -
Po skonfigurowaniu zadania przepływu danych powinno ono wyglądać tak, jak pokazano na zrzucie ekranu #12 .
-
Przykładowe wykonanie pakietu pokazano na zrzucie ekranu #13 . Jak widać, brakujące
7,778 rows
zostały przeniesione zServer B
naServer A
. Zobacz zrzut ekranu #14 aby wyświetlić liczbę rekordów tabeli po wykonaniu pakietu. -
Ponieważ wymagano tylko wstawienia brakujących rekordów, zastosowano to podejście. Jeśli chcesz zaktualizować istniejące rekordy i usunąć rekordy, które nie są już ważne, zapoznaj się z przykładem podanym w tym link. SQL Integration Services, aby załadować plik rozdzielany tabulatorami? Przykład w łączu pokazuje, jak przesłać zwykły plik do SQL, ale aktualizuje istniejące rekordy i usuwa nieprawidłowe rekordy. Ponadto przykład jest dostosowany do obsługi dużej liczby wierszy.
Mam nadzieję, że to pomoże.
Skrypty
.
CREATE SCHEMA [ServerA] AUTHORIZATION [dbo]
GO
CREATE SCHEMA [ServerB] AUTHORIZATION [dbo]
GO
CREATE TABLE [ServerA].[ItemInfo](
[Id] [int] IDENTITY(1,1) NOT NULL,
[ItemId] [varchar](255) NOT NULL,
[ItemName] [varchar](255) NOT NULL,
[ItemType] [varchar](255) NOT NULL,
CONSTRAINT [PK_ItemInfo] PRIMARY KEY CLUSTERED ([Id] ASC),
CONSTRAINT [UK_ItemInfo_ItemId] UNIQUE NONCLUSTERED ([ItemId] ASC)
) ON [PRIMARY]
GO
CREATE TABLE [ServerB].[ItemInfo](
[Id] [int] IDENTITY(1,1) NOT NULL,
[ItemId] [varchar](255) NOT NULL,
[ItemName] [varchar](255) NOT NULL,
[ItemType] [varchar](255) NOT NULL,
CONSTRAINT [PK_ItemInfo] PRIMARY KEY CLUSTERED ([Id] ASC),
CONSTRAINT [UK_ItemInfo_ItemId] UNIQUE NONCLUSTERED ([ItemId] ASC)
) ON [PRIMARY]
GO
Zrzut ekranu nr 1:
Zrzut ekranu nr 2:
Zrzut ekranu nr 3:
Zrzut ekranu nr 4:
Zrzut ekranu nr 5:
Zrzut ekranu nr 6:
Zrzut ekranu nr 7:
Zrzut ekranu nr 8:
Zrzut ekranu nr 9:
Zrzut ekranu nr 10:
Zrzut ekranu nr 11:
Zrzut ekranu nr 12:
Zrzut ekranu nr 13:
Zrzut ekranu nr 14: