Waarschijnlijk heb je inmiddels een antwoord op je vraag gevonden. Dit antwoord is bedoeld om anderen te helpen die op deze vraag zouden kunnen stuiten. Hier is een mogelijke optie die kan worden gebruikt om de gegevensoverdracht op te lossen met behulp van SSIS. Ik ging ervan uit dat je vanuit het SSIS-pakket nog steeds verbindingsreeksen kunt maken die naar zowel je servers A als B verwijzen. Als die veronderstelling onjuist is, laat het me dan weten, zodat ik dit antwoord kan verwijderen. In dit voorbeeld gebruik ik SQL Server 2008 R2
als backend. Aangezien ik geen twee servers heb, heb ik twee identieke tabellen gemaakt in verschillende Schemas
ServerA en ServerB .
Stapsgewijs proces:
-
In de
Connection manager
sectie van de SSIS, maakt u twee OLE DB-verbindingen, namelijk ServerA en ServerB . Dit voorbeeld verwijst naar dezelfde server, maar in uw scenario moeten de verbindingen naar uw twee verschillende servers verwijzen. Zie screenshot #1 . -
Maak twee schema's
ServerA
enServerB
. Maak de tabeldbo.ItemInfo
in beide schema's. Maak scripts voor deze tabellen worden gegeven onder Scripts sectie. Nogmaals, deze objecten zijn alleen voor dit voorbeeld. -
Ik heb beide tabellen gevuld met enkele voorbeeldgegevens. Tabel
ServerA.ItemInfo
bevat2,222 rows
en tabelServerB.ItemInfo
bevat10,000 rows
. Volgens de vraag, de ontbrekende 7.778 rijen moeten worden overgedragen vanServerB
naarServerA
. Zie screenshot #2 . -
Plaats op het controlestroomtabblad van het SSIS-pakket een gegevensstroomtaak zoals weergegeven in screenshot #3 .
-
Dubbelklik op de gegevensstroomtaak om naar het gegevensstroomtabblad te gaan en configureer de gegevensstroomtaak zoals hieronder beschreven. Server B is een
OLE DB Source
; Vind record op server A is eenLookup transformation task
en Server A is eenOLE DB Destination
. -
Configureer
OLE DB Source
Server B zoals getoond in screenshots #4 en #5 . -
Configureer
Lookup transformation task
Vind record op server A zoals getoond in screenshots #6 - #8 . In dit voorbeeld is ItemId de unieke sleutel. Dat is dus de kolom die wordt gebruikt om te zoeken naar ontbrekende records tussen de twee tabellen. Omdat we alleen de rijen nodig hebben die niet bestaan in Server A , moeten we de optieRedirect rows to no match output
. selecteren . -
Plaats een
OLE DB Destination
op de gegevensstroomtaak. Wanneer u de Lookup-transformatietaak verbindt met OLE DB Destination, wordt u gevraagd metInput Output Selection
dialoog. SelecteerLookup No Match Output
uit het dialoogvenster zoals weergegeven in screenshot #9 . Configureer deOLE DB Destination
Server A zoals getoond in screenshots #10 en #11 . -
Zodra de gegevensstroomtaak is geconfigureerd, zou deze eruit moeten zien zoals weergegeven in screenshot #12 .
-
Voorbeelduitvoering van het pakket wordt getoond in screenshot #13 . Zoals je kunt zien, zijn de ontbrekende
7,778 rows
zijn overgebracht vanServer B
naarServer A
. Zie screenshot #14 om het aantal tabelrecords te bekijken na de uitvoering van het pakket. -
Aangezien de vereiste was om alleen de ontbrekende records in te voegen, is deze aanpak gebruikt. Als u bestaande records wilt bijwerken en records wilt verwijderen die niet langer geldig zijn, raadpleeg dan het voorbeeld dat ik heb gegeven in deze link. SQL Integration Services om door tabs gescheiden bestand te laden? Het voorbeeld in de link laat zien hoe u een plat bestand naar SQL kunt overbrengen, maar het werkt bestaande records bij en verwijdert ongeldige records. Het voorbeeld is ook nauwkeurig afgestemd om een groot aantal rijen te verwerken.
Ik hoop dat dat helpt.
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
Screenshot #1:
Screenshot #2:
Screenshot #3:
Screenshot #4:
Screenshot #5:
Screenshot #6:
Screenshot #7:
Screenshot #8:
Screenshot #9:
Screenshot #10:
Screenshot #11:
Schermafbeelding #12:
Screenshot #13:
Screenshot #14: