Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

SSIS — używanie kontenera pętli foreach do aktualizacji rekordów po przeniesieniu

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:

  1. 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 .

  2. Utwórz dwa schematy ServerA i ServerB . 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.

  3. Obie tabele wypełniłem przykładowymi danymi. Tabela ServerA.ItemInfo zawiera 2,222 rows i tabela ServerB.ItemInfo zawiera 10,000 rows . Zgodnie z pytaniem brakujące 7778 wiersze powinny być przeniesione z ServerB na ServerA . Zobacz zrzut ekranu #2 .

  4. Na karcie przepływu kontroli pakietu SSIS umieść zadanie przepływu danych, jak pokazano na zrzucie ekranu #3 .

  5. 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 jest Lookup transformation task i Serwer A jest OLE DB Destination .

  6. Skonfiguruj OLE DB Source Serwer B jak pokazano na zrzutach ekranu #4 i #5 .

  7. 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 .

  8. Umieść OLE DB Destination w zadaniu przepływu danych. Kiedy połączysz zadanie transformacji Lookup z miejscem docelowym OLE DB, zostaniesz poproszony o Input Output Selection dialog. Wybierz Lookup No Match Output z okna dialogowego, jak pokazano na zrzucie ekranu #9 . Skonfiguruj OLE DB Destination Serwer A jak pokazano na zrzutach ekranu #10 i #11 .

  9. Po skonfigurowaniu zadania przepływu danych powinno ono wyglądać tak, jak pokazano na zrzucie ekranu #12 .

  10. Przykładowe wykonanie pakietu pokazano na zrzucie ekranu #13 . Jak widać, brakujące 7,778 rows zostały przeniesione z Server B na Server A . Zobacz zrzut ekranu #14 aby wyświetlić liczbę rekordów tabeli po wykonaniu pakietu.

  11. 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:




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sterownik nie mógł nawiązać bezpiecznego połączenia z programem SQL Server przy użyciu szyfrowania Secure Sockets Layer (SSL)

  2. Zaktualizuj wiersz

  3. SQL Server:Umieść zestaw wyników procedury składowanej w zmiennej tabeli bez określania jej schematu

  4. Błąd SQL z zamówieniem według w podzapytaniu

  5. Relacja jeden do jednego z innym kluczem podstawowym w EF 6.1 Code First