sql >> Database teknologi >  >> RDS >> Sqlserver

SSIS - Brug af en foreach loop container til at opdatere poster efter overførsel

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:

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

  2. Opret to skemaer ServerA og ServerB . Opret tabellen dbo.ItemInfo i begge skemaer. Opret scripts til disse tabeller er angivet under Scripts afsnit. Igen er disse objekter kun til dette eksempel.

  3. Jeg har udfyldt begge tabeller med nogle eksempeldata. Tabel ServerA.ItemInfo indeholder 2,222 rows og tabel ServerB.ItemInfo indeholder 10,000 rows . I henhold til spørgsmålet, de manglende 7.778 rækker skal overføres fra ServerB til ServerA . Se skærmbillede #2 .

  4. På SSIS-pakkens kontrolflow-fane skal du placere en dataflowopgave som vist på skærmbillede #3 .

  5. 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 en Lookup transformation task og Server A er en OLE DB Destination .

  6. Konfigurer OLE DB Source Server B som vist på skærmbilleder #4 og #5 .

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

  8. Placer en OLE DB Destination på dataflowopgaven. Når du forbinder opslagstransformationsopgaven med OLE DB-destination, bliver du bedt om Input Output Selection dialog. Vælg Lookup No Match Output fra dialogen som vist på skærmbillede #9 . Konfigurer OLE DB Destination Server A som vist på skærmbilleder #10 og #11 .

  9. Når dataflowopgaven er konfigureret, skal den se ud som vist på skærmbillede #12 .

  10. 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 fra Server B til Server A . Se skærmbillede #14 for at se antallet af tabelposter efter pakkeudførelsen.

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




  1. CS2001 Mangler AssemblyAttributes.cs ved eksekvering af SSIS-pakke implementeret på serveren

  2. mysql-replikering (TokuDB-replika):Kolonne X i tabellen 'database.table' kan ikke konverteres fra typen 'varchar(Y)' til typen 'varchar(Y)'

  3. Hvordan finder man alle brugerdefinerede (ikke udvidelsesrelaterede) funktioner?

  4. relationel database design scenarie