sql >> Databasteknik >  >> RDS >> Sqlserver

SSIS - Använda en foreach loop-behållare för att uppdatera poster efter överföring

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:

  1. 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 .

  2. Skapa två scheman ServerA och ServerB . Skapa tabellen dbo.ItemInfo i båda schemana. Skapa skript för dessa tabeller finns under Skript sektion. Återigen, dessa objekt är endast för detta exempel.

  3. Jag har fyllt i båda tabellerna med några exempeldata. Tabell ServerA.ItemInfo innehåller 2,222 rows och tabellen ServerB.ItemInfo innehåller 10,000 rows . Enligt frågan, de saknade 7 778 rader ska överföras från ServerB till ServerA . Se skärmbild #2 .

  4. På SSIS-paketets kontrollflödesflik, placera en dataflödesuppgift som visas i skärmbild #3 .

  5. 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 en Lookup transformation task och Server A är en OLE DB Destination .

  6. Konfigurera OLE DB Source Server B som visas i skärmdumpar #4 och #5 .

  7. 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 alternativet Redirect rows to no match output .

  8. Placera en OLE DB Destination på dataflödesuppgiften. När du ansluter uppslagstransformationsuppgiften med OLE DB-destination kommer du att uppmanas med Input Output Selection dialog. Välj Lookup No Match Output från dialogrutan som visas i skärmbild #9 . Konfigurera OLE DB Destination Server A som visas i skärmdumpar #10 och #11 .

  9. När dataflödesuppgiften är konfigurerad bör den se ut som visas i skärmbild #12 .

  10. Exekvering av paketet visas i skärmbild #13 . Som du märker saknas 7,778 rows har överförts från Server B till Server A . Se skärmbild #14 för att se antalet tabellposter efter paketkörningen.

  11. 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:




  1. Hur använder man phps password_hash()-metod..?

  2. PostgreSQL-fråga med dynamiska kolumner och antal från join

  3. Hur bestämmer jag storleken på ett index i MySQL 5.1?

  4. Hur SESSION_CONTEXT() fungerar i SQL Server