Provavelmente, você já encontrou uma resposta para sua pergunta. Esta resposta é para ajudar outras pessoas que possam se deparar com essa pergunta. Aqui está uma opção possível que pode ser usada para resolver a transferência de dados usando o SSIS. Eu assumi que você ainda pode criar cadeias de conexão apontando para os servidores A e B do pacote SSIS. Se essa suposição estiver errada, por favor me avise para que eu possa excluir esta resposta. Neste exemplo, estou usando o
SQL Server 2008 R2
como back-end. Como não tenho dois servidores, criei duas tabelas idênticas em diferentes Schemas
Servidor A e Servidor B . Processo passo a passo:
-
NoConnection manager
seção do SSIS, crie duas conexões OLE DB, a saber, ServerA e Servidor B . Este exemplo está apontando para o mesmo servidor, mas no seu cenário, as conexões precisarão apontar para seus dois servidores diferentes. Consulte a captura de tela nº1 .
-
Crie dois esquemasServerA
eServerB
. Crie a tabeladbo.ItemInfo
em ambos os esquemas. A criação de scripts para essas tabelas é fornecida em Scripts seção. Novamente, esses objetos são apenas para este exemplo.
-
Eu preenchi ambas as tabelas com alguns dados de exemplo. TabelaServerA.ItemInfo
contém2,222 rows
e tabelaServerB.ItemInfo
contém10,000 rows
. De acordo com a pergunta, os 7.778 desaparecidos as linhas devem ser transferidas deServerB
paraServerA
. Consulte a captura de tela nº2 .
-
Na guia de fluxo de controle do pacote SSIS, coloque uma tarefa de fluxo de dados conforme mostrado na captura de tela #3 .
-
Clique duas vezes na tarefa de fluxo de dados para navegar até a guia de fluxo de dados e configure a tarefa de fluxo de dados conforme descrito abaixo. Servidor B é umaOLE DB Source
; Encontrar registro no Servidor A é umaLookup transformation task
e Servidor A é umOLE DB Destination
.
-
ConfigurarOLE DB Source
Servidor B conforme mostrado nas capturas de tela #4 e #5 .
-
ConfigurarLookup transformation task
Encontrar registro no Servidor A conforme mostrado nas capturas de tela #6 - #8 . Neste exemplo, ItemId é a chave exclusiva. Portanto, essa é a coluna usada para procurar registros ausentes entre as duas tabelas. Como precisamos apenas das linhas que não existem no Servidor A , precisamos selecionar a opçãoRedirect rows to no match output
.
-
Coloque umOLE DB Destination
na tarefa de fluxo de dados. Ao conectar a tarefa de transformação Lookup com OLE DB Destination, você será solicitado comInput Output Selection
diálogo. SelecioneLookup No Match Output
na caixa de diálogo, conforme mostrado na captura de tela #9 . Configure oOLE DB Destination
Servidor A conforme mostrado nas capturas de tela #10 e #11 .
-
Depois que a tarefa de fluxo de dados estiver configurada, ela deverá ter a aparência mostrada na captura de tela #12 .
-
A execução de amostra do pacote é mostrada na captura de tela #13 . Como você pode notar, as7,778 rows
ausentes foram transferidos doServer B
paraServer A
. Consulte a captura de tela nº14 para visualizar a contagem de registros da tabela após a execução do pacote.
-
Como o requisito era apenas inserir os registros ausentes, essa abordagem foi usada. Se você deseja atualizar os registros existentes e excluir registros que não são mais válidos, consulte o exemplo que forneci neste link. SQL Integration Services para carregar arquivo delimitado por tabulação? O exemplo no link mostra como transferir um arquivo simples para SQL, mas atualiza os registros existentes e exclui registros inválidos. Além disso, o exemplo é ajustado para lidar com um grande número de linhas.
Espero que ajude.
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
Captura de tela nº 1:
Captura de tela nº 2:
Captura de tela nº 3:
Captura de tela nº 4:
Captura de tela nº 5:
Captura de tela nº 6:
Captura de tela nº 7:
Captura de tela nº 8:
Captura de tela nº 9:
Captura de tela nº 10:
Captura de tela nº 11:
Captura de tela nº 12:
Captura de tela nº 13:
Captura de tela nº 14: