是否有基于主键合并行的简写?例如:
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);
如果主键包含大量列,则写出条件很繁琐。此外,如果主键发生变化,许多连接和合并可能会突然中断。
您可能会问,“为什么要更改主键?” 真实场景:我们被告知一个对象由其专有名称唯一标识。后来,我们发现如果对象移动到另一个子网,专有名称可能会发生变化。新的要求改变了我们唯一识别对象的方式。这在很多地方破坏了产品。如果我们在主键上而不是在特定列上合并,一些混乱是可以避免的。
不,产品中没有与您要求的内容类似的内容。
标准 SQL 具有
NATURAL JOIN
连接公共列名的 a 概念,但 SQL Server 并未实现这一点,并且无法保证任何此类名称无论如何都会与 PK 相对应。如果这对您来说非常重要,那么理论上您可以编写某种脚本预处理器或动态 SQL 代码生成器来执行此操作。