Existe um atalho para mesclar linhas com base na chave primária? Por exemplo:
MERGE INTO [MyDatabase].[MySchema].[MyTable] AS target
USING [MyLinkedServer].[MyDatabase].[MySchema].[MyTable] AS source
-- The following line is pseudocode illustrating what we want to accomplish
ON (target primary key equals source primary key)
WHEN MATCHED THEN
UPDATE SET target.MyColumn = source.MyColumn
WHEN NOT MATCHED BY TARGET THEN
INSERT (MyCol1, MyCol2, MyCol3)
VALUES (source.MyCol1, source.MyCol2, source.MyCol3);
Escrever as condições é tedioso se a chave primária contiver um grande número de colunas. Além disso, se a chave primária for alterada, muitas junções e fusões podem ser interrompidas repentinamente.
Você pode perguntar: "Por que a chave primária está mudando?" Cenário real: Fomos informados de que um objeto foi identificado exclusivamente por seu nome distinto. Mais tarde, descobrimos que um nome distinto poderia mudar se o objeto fosse movido para outra sub-rede. Novos requisitos que mudaram a maneira como identificamos os objetos de maneira exclusiva. Isso quebrou o produto em vários lugares. Parte da confusão poderia ter sido evitada se tivéssemos mesclado na chave primária em vez de em colunas específicas.
Não, não há nada semelhante ao que você está pedindo embutido no produto.
O SQL padrão tem o conceito de um
NATURAL JOIN
que une nomes de colunas comuns, mas o SQL Server não implementa isso e não há garantia de que esses nomes correspondam ao PK de qualquer maneira.Seria possível, em teoria, escrever algum tipo de pré-processador de script ou gerador de código SQL dinâmico que fizesse isso se fosse uma necessidade extremamente importante para você.