Estou tentando comparar dados de dois sistemas. A ideia básica é:
- Criar tabela temporária.
- Inserir dados da Tabela1.
- Insira os dados da Tabela2 (Tabela de um servidor remoto vinculado) com IDs UNIQUE respeitados.
- Filtre onde a primeira ou segunda tabela tem informações diferentes.
Estou tentando obter o segundo conjunto de inserções, do segundo sistema, para inserir e, se duplicado, atualizar. Eu não consigo acertar. Para a inserção final, o que devo ter?
Não tenho a "Parte do Filtro" porque não tenho os dados da Tabela2 inseridos. A parte do filtro mostraria as linhas em que o nome Ativo, Sobrenome ou Nome é diferente entre os dois sistemas. where Table1LastName <> Table2LastName
Declarações de tipo simples .
Nota: Eu tenho isso trabalhando com 2 tabelas temporárias criadas ... e uma junção externa completa e alguns "Onde o ID é nulo". Estou apenas tentando fazer isso funcionar de uma maneira que nunca usei antes.
if object_id('tempdb..#CompareDrs') is not null
drop table #CompareDrs;
GO
create table #CompareDrs
(
ID varchar(20) unique
,TABLE1Active varchar(1)
,TABLE1LastName varchar(50)
,TABLE1FirstName varchar(50)
,TABLE2Active varchar(1)
,TABLE2LastName varchar(50)
,TABLE2FirstName varchar(50)
);
GO
INSERT INTO #CompareDrs (ID, TABLE1Active, TABLE1LastName, TABLE1FirstName)
SELECT
right('00000000000000000000' + ForeignID, 20) ID
,case when Active = 0 then 'I'
when Active = 1 then 'A'
else ' '
end TABLE1Active
,LastName TABLE1LastName
,FirstName TABLE1FirstName
FROM
[DATABASE1].dbo.DRs
Order By
ID;
GO
INSERT Into #CompareDrs (ID, TABLE2Active, TABLE2LastName, TABLE2FirstName)
SELECT
right('00000000000000000000' + Cast(DRDR# as Varchar(50)), 20) ID
,DRAFLG TABLE2Active
,DRLNAM TABLE2LastName
,DR1NAM TABLE2FirstName
FROM
[LINKEDERVER].[DATABASE].[CATALOG].[TABLE] DR
ON DUPLICATE KEY UPDATE TABLE2Active = VALUES(TABLE2Active),
TABLE2LastName = VALUES(TABLE2LastName),
TABLE2FirstName = VALUES(TABLE2FirstName),
GO
SELECT * FROM #CompareDrs;
Se você estiver usando o SQL 2008, observe a instrução MERGE , ela pode fazer o que outras plataformas chamam de UPSERT, UPDATE se existir, caso contrário, INSERT.
Você pode escrever uma instrução SELECT que capture os id's que foram inseridos desde a primeira inserção na tabela temporária.
Em seguida, simplesmente INSERT da 2ª tabela, a menos que o id esteja contido em sua instrução SELET anterior. Use uma instrução ELSE para implementar as outras linhas como um UPDATE
Parece que você está colocando linhas correspondentes de duas tabelas em uma única linha em outra tabela.
Se for esse o caso, então você precisa
Posso estar errado sobre isso, porque não está completamente claro para mim que os números de identificação nas duas tabelas serão iguais.