Wahrscheinlich haben Sie inzwischen eine Antwort auf Ihre Frage gefunden. Diese Antwort soll anderen helfen, die auf diese Frage stoßen könnten. Hier ist eine mögliche Option, mit der die Datenübertragung per SSIS aufgelöst werden kann. Ich bin davon ausgegangen, dass Sie weiterhin Verbindungszeichenfolgen erstellen können, die auf Ihre beiden Server A und B aus dem SSIS-Paket verweisen. Wenn diese Annahme falsch ist, lassen Sie es mich bitte wissen, damit ich diese Antwort löschen kann. In diesem Beispiel verwende ich SQL Server 2008 R2 als Backend. Da ich keine zwei Server habe, habe ich zwei identische Tabellen in unterschiedlichen Schemas erstellt ServerA und ServerB .
Schritt-für-Schritt-Prozess:
-
Im
Connection managerAbschnitt des SSIS zwei OLE DB-Verbindungen erstellen, nämlich ServerA und ServerB . Dieses Beispiel verweist auf denselben Server, aber in Ihrem Szenario müssen die Verbindungen auf Ihre beiden unterschiedlichen Server verweisen. Siehe Screenshot Nr. 1 . -
Erstellen Sie zwei Schemas
ServerAundServerB. Erstellen Sie die Tabelledbo.ItemInfoin beiden Schemata. Erstellungsskripte für diese Tabellen finden Sie unter Skripte Sektion. Auch diese Objekte sind nur für dieses Beispiel. -
Ich habe beide Tabellen mit einigen Beispieldaten gefüllt. Tabelle
ServerA.ItemInfoenthält2,222 rowsund TabelleServerB.ItemInfoenthält10,000 rows. Gemäß der Frage fehlen die 7.778 Zeilen sollten vonServerBübertragen werden zuServerA. Siehe Screenshot #2 . -
Platzieren Sie auf der Registerkarte Ablaufsteuerung des SSIS-Pakets eine Datenflussaufgabe, wie in Screenshot Nr. 3 gezeigt .
-
Doppelklicken Sie auf die Datenflussaufgabe, um zur Registerkarte „Datenfluss“ zu navigieren, und konfigurieren Sie die Datenflussaufgabe wie unten beschrieben. Server B ist eine
OLE DB Source; Suchen Sie den Datensatz auf Server A ist eineLookup transformation taskund Server A ist einOLE DB Destination. -
Konfigurieren Sie
OLE DB SourceServer B wie in Screenshots #4 gezeigt und #5 . -
Konfigurieren Sie die
Lookup transformation taskSuchen Sie den Datensatz auf Server A wie in Screenshots #6 gezeigt - #8 . In diesem Beispiel ist ItemId der eindeutige Schlüssel. Daher ist dies die Spalte, die verwendet wird, um nach fehlenden Datensätzen zwischen den beiden Tabellen zu suchen. Da wir nur die Zeilen benötigen, die auf Server A nicht vorhanden sind , müssen wir die OptionRedirect rows to no match outputauswählen . -
Platzieren Sie ein
OLE DB Destinationauf der Datenflusstask. Wenn Sie die Lookup-Umwandlungsaufgabe mit dem OLE DB-Ziel verbinden, werden Sie mitInput Output Selectionaufgefordert Dialog. Wählen SieLookup No Match Outputaus dem Dialog, wie in Screenshot #9 gezeigt . Konfigurieren Sie dasOLE DB DestinationServer A wie in Screenshots #10 gezeigt und #11 . -
Sobald die Datenflussaufgabe konfiguriert ist, sollte sie wie in Screenshot #12 aussehen .
-
Beispielausführung des Pakets ist in Screenshot #13 gezeigt . Wie Sie sehen können, fehlen die
7,778 rowswurden vonServer Bübertragen zuServer A. Siehe Screenshot #14 um die Anzahl der Tabellendatensätze nach der Paketausführung anzuzeigen. -
Da die Anforderung darin bestand, nur die fehlenden Datensätze einzufügen, wurde dieser Ansatz verwendet. Wenn Sie vorhandene Datensätze aktualisieren und Datensätze löschen möchten, die nicht mehr gültig sind, beziehen Sie sich bitte auf das Beispiel, das ich in diesem link. SQL Integration Services zum Laden einer tabulatorgetrennten Datei? Das Beispiel im Link zeigt, wie eine Flatfile an SQL übertragen wird, aktualisiert jedoch vorhandene Datensätze und löscht ungültige Datensätze. Außerdem ist das Beispiel fein abgestimmt, um eine große Anzahl von Zeilen zu verarbeiten.
Hoffe das hilft.
Skripte
.
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
Screenshot 1:

Screenshot Nr. 2:

Screenshot 3:

Screenshot #4:

Screenshot Nr. 5:

Screenshot Nr. 6:

Screenshot #7:

Screenshot #8:

Screenshot Nr. 9:

Screenshot Nr. 10:

Screenshot Nr. 11:

Screenshot Nr. 12:

Screenshot Nr. 13:

Screenshot Nr. 14:
