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 manager
Abschnitt 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
ServerA
undServerB
. Erstellen Sie die Tabelledbo.ItemInfo
in 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.ItemInfo
enthält2,222 rows
und TabelleServerB.ItemInfo
enthä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 task
und Server A ist einOLE DB Destination
. -
Konfigurieren Sie
OLE DB Source
Server B wie in Screenshots #4 gezeigt und #5 . -
Konfigurieren Sie die
Lookup transformation task
Suchen 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 output
auswählen . -
Platzieren Sie ein
OLE DB Destination
auf der Datenflusstask. Wenn Sie die Lookup-Umwandlungsaufgabe mit dem OLE DB-Ziel verbinden, werden Sie mitInput Output Selection
aufgefordert Dialog. Wählen SieLookup No Match Output
aus dem Dialog, wie in Screenshot #9 gezeigt . Konfigurieren Sie dasOLE DB Destination
Server 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 rows
wurden 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: