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)
我想使用merge语句来更新我已有的表,但使用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。
发布于 2021-10-26 07:52:06
你能试着把它打开吗。
将IDENTITY_INSERT table1设置为ON;
https://stackoverflow.com/questions/69711454
复制相似问题