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:
-
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 . -
Vytvořte dvě schémata
ServerA
aServerB
. Vytvořte tabulkudbo.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. -
Obě tabulky jsem naplnil ukázkovými daty. Tabulka
ServerA.ItemInfo
obsahuje2,222 rows
a tabulkaServerB.ItemInfo
obsahuje10,000 rows
. Podle otázky chybí 7 778 řádky by měly být přeneseny zeServerB
naServerA
. Viz snímek obrazovky č. 2 . -
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 .
-
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 jeLookup transformation task
a Server A jeOLE DB Destination
. -
Nakonfigurujte
OLE DB Source
Server B jak je znázorněno na snímcích obrazovky #4 a #5 . -
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žnostRedirect rows to no match output
. -
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ániInput Output Selection
dialog. VyberteLookup No Match Output
z dialogu, jak je znázorněno na snímku obrazovky #9 . NakonfigurujteOLE DB Destination
Server A jak je znázorněno na snímcích obrazovky #10 a #11 . -
Jakmile je úloha toku dat nakonfigurována, měla by vypadat jako na snímku obrazovky č. 12 .
-
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 zeServer B
naServer A
. Viz snímek obrazovky č. 14 pro zobrazení počtu záznamů tabulky po provedení balíčku. -
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: