首页 > 解决方案 > Synapse SQL:将临时表合并到主表和自动增量标识

问题描述

Azure Synapse 对主键(https://docs.microsoft.com/en-us/azure/synapse-analytics/sql-data-warehouse/sql-data-warehouse-table-constraints)有不同的方法,它不允许传统的身份列(例如,INT IDENTITY(1,1) NOT NULL PRIMARY KEY

我想使用合并语句来更新我拥有的表,但是使用 Synapse SQL,我不确定在合并新数据时如何获取自动增加的主键。考虑以下 MWE:


CREATE TABLE [table1]
  (  
    [primaryKey] INT IDENTITY(1,1) NOT NULL,
    [id] INT,
    [name] VARCHAR(25)
  )  
WITH ( CLUSTERED COLUMNSTORE INDEX,
DISTRIBUTION = HASH([id])
);

CREATE TABLE [table1_staging]
  (  
    [id] INT,
    [name] VARCHAR(25)
  );

INSERT INTO [table1_staging] 
(id, name) VALUES (1, 'john');


-- run merge
MERGE [table1] AS TARGET
USING [table1_staging] AS SOURCE 
-- match on ID
ON (TARGET.id = SOURCE.id)
-- when no match; insert
WHEN NOT MATCHED BY TARGET 
THEN INSERT ([id], [name]) VALUES(SOURCE.[id], SOURCE.[name]);

-- cannot update identity column

创建主键 ( INT PRIMARY KEY NONCLUSTERED NOT ENFORCED) 的推荐方法不会自动递增,导致合并失败,因为它不允许 NULL。

标签: sqlazure-synapse

解决方案


你能不能试着打开它。

SET IDENTITY_INSERT table1 ON;


推荐阅读