主键的简写?

Rai*_*olt 2 sql-server primary-key t-sql merge

是否有基于主键合并行的简写?例如:

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);
Run Code Online (Sandbox Code Playgroud)

如果主键包含大量列,则写出条件会很乏味。此外,如果主键发生变化,许多连接和合并可能会突然中断。

您可能会问,“为什么主键会改变?” 真实场景:我们被告知一个对象由其专有名称唯一标识。后来,我们发现如果对象移动到另一个子网,专有名称可能会改变。新要求的推出改变了我们唯一标识对象的方式。这在很多地方破坏了产品。如果我们在主键而不是特定列上进行合并,则可以避免一些混乱。

Mar*_*ith 5

不,产品中没有与您要求的内容类似的内容。

标准 SQL 具有NATURAL JOIN连接公共列名的 a 概念,但 SQL Server 没有实现这一点,并且不能保证任何此类名称无论如何都会与 PK 对应。

如果这对您来说非常重要,那么理论上您可以编写某种脚本预处理器或动态 SQL 代码生成器来执行此操作。