Du har sandsynligvis fundet et svar på dit spørgsmål nu. Dette svar er for at hjælpe andre, der måtte falde over dette spørgsmål. Her er en mulig mulighed, der kan bruges til at løse dataoverførslen ved hjælp af SSIS. Jeg antog, at du stadig kan oprette forbindelsesstrenge, der peger på både dine servere A og B fra SSIS-pakken. Hvis denne antagelse er forkert, så lad mig det vide, så jeg kan slette dette svar. I dette eksempel bruger jeg SQL Server 2008 R2
som back-end. Da jeg ikke har to servere, har jeg oprettet to identiske tabeller i forskellige Schemas
ServerA og ServerB .
Trin-for-trin proces:
-
I
Connection manager
sektion af SSIS, skal du oprette to OLE DB-forbindelser, nemlig ServerA og ServerB . Dette eksempel peger på den samme server, men i dit scenarie skal forbindelserne pege på dine to forskellige servere. Se skærmbillede #1 . -
Opret to skemaer
ServerA
ogServerB
. Opret tabellendbo.ItemInfo
i begge skemaer. Opret scripts til disse tabeller er angivet under Scripts afsnit. Igen er disse objekter kun til dette eksempel. -
Jeg har udfyldt begge tabeller med nogle eksempeldata. Tabel
ServerA.ItemInfo
indeholder2,222 rows
og tabelServerB.ItemInfo
indeholder10,000 rows
. I henhold til spørgsmålet, de manglende 7.778 rækker skal overføres fraServerB
tilServerA
. Se skærmbillede #2 . -
På SSIS-pakkens kontrolflow-fane skal du placere en dataflowopgave som vist på skærmbillede #3 .
-
Dobbeltklik på dataflowopgaven for at navigere til fanen dataflow og konfigurer dataflowopgaven som beskrevet nedenfor. Server B er en
OLE DB Source
; Find post i server A er enLookup transformation task
og Server A er enOLE DB Destination
. -
Konfigurer
OLE DB Source
Server B som vist på skærmbilleder #4 og #5 . -
Konfigurer
Lookup transformation task
Find post i server A som vist på skærmbilleder #6 - #8 . I dette eksempel er ItemId den unikke nøgle. Derfor er det den kolonne, der bruges til at søge efter manglende poster mellem de to tabeller. Da vi kun har brug for de rækker, der ikke findes i Server A , skal vi vælge mulighedenRedirect rows to no match output
. -
Placer en
OLE DB Destination
på dataflowopgaven. Når du forbinder opslagstransformationsopgaven med OLE DB-destination, bliver du bedt omInput Output Selection
dialog. VælgLookup No Match Output
fra dialogen som vist på skærmbillede #9 . KonfigurerOLE DB Destination
Server A som vist på skærmbilleder #10 og #11 . -
Når dataflowopgaven er konfigureret, skal den se ud som vist på skærmbillede #12 .
-
Eksempeludførelse af pakken er vist på skærmbillede #13 . Som du kan bemærke, er de manglende
7,778 rows
er blevet overført fraServer B
tilServer A
. Se skærmbillede #14 for at se antallet af tabelposter efter pakkeudførelsen. -
Da kravet var blot at indsætte de manglende poster, er denne fremgangsmåde blevet brugt. Hvis du gerne vil opdatere eksisterende poster og slette poster, der ikke længere er gyldige, skal du henvise til eksemplet, som jeg har givet i denne link. SQL Integration Services for at indlæse tabulatorsepareret fil? Eksemplet i linket viser, hvordan man overfører en flad fil til SQL, men den opdaterer eksisterende poster og sletter ugyldige poster. Eksemplet er også finjusteret til at håndtere et stort antal rækker.
Håber det hjælper.
Scripts
.
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ærmbillede #1:
Skærmbillede #2:
Skærmbillede #3:
Skærmbillede #4:
Skærmbillede #5:
Skærmbillede #6:
Skærmbillede #7:
Skærmbillede #8:
Skærmbillede #9:
Skærmbillede #10:
Skærmbillede #11:
Skærmbillede #12:
Skærmbillede #13:
Skærmbillede #14: