sql >> Databáze >  >> RDS >> Sqlserver

SSIS - Použití kontejneru foreach smyčky k aktualizaci záznamů po přenosu

Pravděpodobně jste již našli odpověď na svou otázku. Tato odpověď má pomoci ostatním, kteří by mohli narazit na tuto otázku. Zde je možná možnost, kterou lze použít k vyřešení přenosu dat pomocí SSIS. Předpokládal jsem, že stále můžete vytvořit připojovací řetězce ukazující na oba vaše servery A a B z balíčku SSIS. Pokud je tento předpoklad nesprávný, dejte mi prosím vědět, abych mohl tuto odpověď smazat. V tomto příkladu používám SQL Server 2008 R2 jako back-end. Protože nemám dva servery, vytvořil jsem dvě identické tabulky v různých Schemas ServerA a ServerB .

Postup krok za krokem:

  1. Ve Connection manager části SSIS vytvořte dvě připojení OLE DB, jmenovitě ServerA a ServerB . Tento příklad ukazuje na stejný server, ale ve vašem scénáři budou muset připojení ukazovat na vaše dva různé servery. Viz snímek obrazovky č. 1 .

  2. Vytvořte dvě schémata ServerA a ServerB . Vytvořte tabulku dbo.ItemInfo v obou schématech. Vytvoření skriptů pro tyto tabulky je uvedeno v části Skripty sekce. Opět platí, že tyto objekty jsou pouze pro tento příklad.

  3. Obě tabulky jsem naplnil ukázkovými daty. Tabulka ServerA.ItemInfo obsahuje 2,222 rows a tabulka ServerB.ItemInfo obsahuje 10,000 rows . Podle otázky chybí 7 778 řádky by měly být přeneseny ze ServerB na ServerA . Viz snímek obrazovky č. 2 .

  4. Na kartě toku ovládacích prvků balíčku SSIS umístěte úlohu toku dat, jak je znázorněno na snímku obrazovky č.3 .

  5. Poklepáním na úlohu toku dat přejděte na kartu toku dat a nakonfigurujte úlohu toku dat, jak je popsáno níže. Server B je OLE DB Source; Najít záznam na serveru A je Lookup transformation task a Server A je OLE DB Destination .

  6. Nakonfigurujte OLE DB Source Server B jak je znázorněno na snímcích obrazovky #4 a #5 .

  7. Nakonfigurujte Lookup transformation task Najít záznam na serveru A jak je znázorněno na snímcích obrazovky #6 – #8 . V tomto příkladu je ItemId jedinečný klíč. Jedná se tedy o sloupec používaný k hledání chybějících záznamů mezi dvěma tabulkami. Protože potřebujeme pouze řádky, které na Serveru A neexistují , musíme vybrat možnost Redirect rows to no match output .

  8. Umístěte OLE DB Destination na úkolu toku dat. Když propojíte úlohu transformace vyhledávání s cílem OLE DB, budete vyzváni Input Output Selection dialog. Vyberte Lookup No Match Output z dialogu, jak je znázorněno na snímku obrazovky #9 . Nakonfigurujte OLE DB Destination Server A jak je znázorněno na snímcích obrazovky #10 a #11 .

  9. Jakmile je úloha toku dat nakonfigurována, měla by vypadat jako na snímku obrazovky č. 12 .

  10. Ukázkové provedení balíčku je znázorněno na snímku obrazovky č. 13 . Jak si můžete všimnout, chybí 7,778 rows byly přeneseny ze Server B na Server A . Viz snímek obrazovky č. 14 pro zobrazení počtu záznamů tabulky po provedení balíčku.

  11. Protože požadavkem bylo pouze vložit chybějící záznamy, byl použit tento přístup. Pokud byste chtěli aktualizovat stávající záznamy a smazat záznamy, které již nejsou platné, použijte příklad, který jsem uvedl v tomto odkaz. SQL Integration Services načíst soubor oddělený tabulátory? Příklad v odkazu ukazuje, jak přenést plochý soubor do SQL, ale aktualizuje stávající záznamy a odstraňuje neplatné záznamy. Tento příklad je také vyladěn tak, aby zvládl velký počet řádků.

Doufám, že to pomůže.

Skripty

.

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

Snímek obrazovky č. 1:

Snímek obrazovky č. 2:

Snímek obrazovky č. 3:

Snímek obrazovky č. 4:

Snímek obrazovky č. 5:

Snímek obrazovky č. 6:

Snímek obrazovky č. 7:

Snímek obrazovky č. 8:

Snímek obrazovky č. 9:

Snímek obrazovky č. 10:

Snímek obrazovky č. 11:

Snímek obrazovky č. 12:

Snímek obrazovky č. 13:

Snímek obrazovky č. 14:




  1. PHP - Laravel 5 získává data do html tabulky ze 3 databázových tabulek SQL se sloupcem DATA jako záhlavím

  2. Zatímco Loop pomocí PHP se serverem MySQL

  3. ORACLE SQL Group Stále dává duplikáty

  4. Zeptejte se Oracle na podrobnosti o chybě kódu ORA