Förmodligen har du hittat ett svar på din fråga vid det här laget. Detta svar är till för att hjälpa andra som kan snubbla över denna fråga. Här är ett möjligt alternativ som kan användas för att lösa dataöverföringen med SSIS. Jag antog att du fortfarande kan skapa anslutningssträngar som pekar på både dina servrar A och B från SSIS-paketet. Om det antagandet är fel, vänligen meddela mig så att jag kan radera det här svaret. I det här exemplet använder jag SQL Server 2008 R2
som back-end. Eftersom jag inte har två servrar har jag skapat två identiska tabeller i olika Schemas
ServerA och ServerB .
Steg-för-steg-process:
-
I
Connection manager
i SSIS, skapa två OLE DB-anslutningar, nämligen ServerA och ServerB . Det här exemplet pekar på samma server men i ditt scenario måste anslutningarna peka på dina två olika servrar. Se skärmbild #1 . -
Skapa två scheman
ServerA
ochServerB
. Skapa tabellendbo.ItemInfo
i båda schemana. Skapa skript för dessa tabeller finns under Skript sektion. Återigen, dessa objekt är endast för detta exempel. -
Jag har fyllt i båda tabellerna med några exempeldata. Tabell
ServerA.ItemInfo
innehåller2,222 rows
och tabellenServerB.ItemInfo
innehåller10,000 rows
. Enligt frågan, de saknade 7 778 rader ska överföras frånServerB
tillServerA
. Se skärmbild #2 . -
På SSIS-paketets kontrollflödesflik, placera en dataflödesuppgift som visas i skärmbild #3 .
-
Dubbelklicka på dataflödesuppgiften för att navigera till dataflödesfliken och konfigurera dataflödesuppgiften enligt beskrivningen nedan. Server B är en
OLE DB Source
; Hitta post i Server A är enLookup transformation task
och Server A är enOLE DB Destination
. -
Konfigurera
OLE DB Source
Server B som visas i skärmdumpar #4 och #5 . -
Konfigurera
Lookup transformation task
Hitta post i Server A som visas i skärmdump #6 - #8 . I det här exemplet är ItemId den unika nyckeln. Det är alltså den kolumn som används för att söka efter saknade poster mellan de två tabellerna. Eftersom vi bara behöver de rader som inte finns i Server A , måste vi välja alternativetRedirect rows to no match output
. -
Placera en
OLE DB Destination
på dataflödesuppgiften. När du ansluter uppslagstransformationsuppgiften med OLE DB-destination kommer du att uppmanas medInput Output Selection
dialog. VäljLookup No Match Output
från dialogrutan som visas i skärmbild #9 . KonfigureraOLE DB Destination
Server A som visas i skärmdumpar #10 och #11 . -
När dataflödesuppgiften är konfigurerad bör den se ut som visas i skärmbild #12 .
-
Exekvering av paketet visas i skärmbild #13 . Som du märker saknas
7,778 rows
har överförts frånServer B
tillServer A
. Se skärmbild #14 för att se antalet tabellposter efter paketkörningen. -
Eftersom kravet var att bara infoga de saknade posterna har detta tillvägagångssätt använts. Om du vill uppdatera befintliga poster och ta bort poster som inte längre är giltiga, se exemplet som jag har tillhandahållit i denna länk. SQL Integration Services för att ladda tabbseparerad fil? Exemplet i länken visar hur man överför en platt fil till SQL men den uppdaterar befintliga poster och tar bort ogiltiga poster. Exemplet är också finjusterat för att hantera ett stort antal rader.
Hoppas det hjälper.
Skript
.
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
Skärmdump #1:
Skärmdump #2:
Skärmdump #3:
Skärmdump #4:
Skärmdump #5:
Skärmdump #6:
Skärmdump #7:
Skärmdump #8:
Skärmdump #9:
Skärmdump #10:
Skärmdump #11:
Skärmdump #12:
Skärmdump #13:
Skärmdump #14: