Vous avez probablement déjà trouvé une réponse à votre question. Cette réponse est d'aider les autres qui pourraient tomber sur cette question. Voici une option possible qui peut être utilisée pour résoudre le transfert de données à l'aide de SSIS. J'ai supposé que vous pouviez toujours créer des chaînes de connexion pointant vers vos serveurs A et B à partir du package SSIS. Si cette hypothèse est fausse, veuillez me le faire savoir afin que je puisse supprimer cette réponse. Dans cet exemple, j'utilise SQL Server 2008 R2
comme arrière-plan. Comme je n'ai pas deux serveurs, j'ai créé deux tables identiques dans des Schemas
différents ServeurA et ServeurB .
Processus étape par étape :
-
Dans le
Connection manager
section du SSIS, créez deux connexions OLE DB à savoir ServerA et ServeurB . Cet exemple pointe vers le même serveur mais dans votre scénario, les connexions devront pointer vers vos deux serveurs différents. Reportez-vous à la capture d'écran #1 . -
Créer deux schémas
ServerA
etServerB
. Créez la tabledbo.ItemInfo
dans les deux schémas. Les scripts de création pour ces tables sont indiqués sous Scripts section. Encore une fois, ces objets sont pour cet exemple uniquement. -
J'ai rempli les deux tables avec des exemples de données. Tableau
ServerA.ItemInfo
contient2,222 rows
et la tableServerB.ItemInfo
contient10,000 rows
. Selon la question, les 7 778 manquants les lignes doivent être transférées depuisServerB
versServerA
. Reportez-vous à la capture d'écran #2 . -
Dans l'onglet de flux de contrôle du package SSIS, placez une tâche de flux de données comme indiqué dans la capture d'écran #3 .
-
Double-cliquez sur la tâche de flux de données pour accéder à l'onglet de flux de données et configurez la tâche de flux de données comme décrit ci-dessous. Serveur B est une
OLE DB Source
; Rechercher un enregistrement sur le serveur A est uneLookup transformation task
et Serveur A est uneOLE DB Destination
. -
Configurer
OLE DB Source
Serveur B comme le montrent les captures d'écran #4 et #5 . -
Configurer la
Lookup transformation task
Rechercher un enregistrement sur le serveur A comme le montrent les captures d'écran #6 - #8 . Dans cet exemple, ItemId est la clé unique. Il s'agit donc de la colonne utilisée pour rechercher les enregistrements manquants entre les deux tables. Puisque nous n'avons besoin que des lignes qui n'existent pas dans le serveur A , nous devons sélectionner l'optionRedirect rows to no match output
. -
Placer une
OLE DB Destination
sur la tâche de flux de données. Lorsque vous connectez la tâche de transformation de recherche avec la destination OLE DB, vous serez invité avecInput Output Selection
dialogue. SélectionnezLookup No Match Output
à partir de la boîte de dialogue comme indiqué dans la capture d'écran #9 . Configurer laOLE DB Destination
Serveur A comme le montrent les captures d'écran #10 et #11 . -
Une fois la tâche de flux de données configurée, elle devrait ressembler à celle illustrée dans la capture d'écran #12 .
-
Un exemple d'exécution du package est illustré dans la capture d'écran #13 . Comme vous pouvez le constater, les
7,778 rows
manquantes ont été transférés depuis leServer B
versServer A
. Reportez-vous à la capture d'écran #14 pour afficher le nombre d'enregistrements de table après l'exécution du package. -
Étant donné que l'exigence était d'insérer uniquement les enregistrements manquants, cette approche a été utilisée. Si vous souhaitez mettre à jour des enregistrements existants et supprimer des enregistrements qui ne sont plus valides, veuillez vous référer à l'exemple que j'ai fourni dans ce lien. SQL Integration Services pour charger le fichier délimité par des tabulations ? L'exemple du lien montre comment transférer un fichier plat vers SQL, mais il met à jour les enregistrements existants et supprime les enregistrements non valides. De plus, l'exemple est affiné pour gérer un grand nombre de lignes.
J'espère que ça aide.
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
Capture d'écran 1 :
Capture d'écran 2 :
Capture d'écran 3 :
Capture d'écran 4 :
Capture d'écran #5 :
Capture d'écran 6 :
Capture d'écran n° 7 :
Capture d'écran 8 :
Capture d'écran #9 :
Capture d'écran 10 :
Capture d'écran 11 :
Capture d'écran 12 :
Capture d'écran 13 :
Capture d'écran 14 :