sql - 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。
解决方案
你能不能试着打开它。
SET IDENTITY_INSERT table1 ON;
推荐阅读
- javascript - 在 promise 内部和外部设置 state 会影响 react 中的渲染组件
- aem - AEM 查询结果的顺序不同
- python - 默认情况下,Spyder 使用 Spyder Python 2.7 打开,而我的 Anaconda 安装在 Python 3.6+ 中
- push-notification - 为什么我在 iOS 13 中的应用程序在被用户终止时通过静默推送在后台唤醒
- scripting - 我可以从 if 测试将 Octave 脚本文件中的变量和函数加载到全局范围内吗?
- node.js - 动态站点需要什么 Browsersync 代理设置,我正在尝试运行我的 app.js 文件但页面超时
- modalviewcontroller - 嵌入 iOS13 模态视图控制器时,自定义 UIControl 滑块不起作用
- parallel-processing - Log4Net 如何在并行运行 MsTest 测试时为每个测试生成多个日志文件
- flutter - 未来完成后,Flutter FutureProvider 不会更新孩子
- android - 我们可以在 android 中使用 sqlite3_backup 函数将内存数据库加载到持久存储吗?