我们有一个 ETL 作业,它需要将一行插入到 Table X
中,然后检索插入到 Table X 中的行的
用于以后的转换。
IDENTITY
值IDENTITY
用作代理键,例如 here .
在 SQL Server 中可以使用 SCOPE_IDENTITY但这在 Azure Synapse(以前称为 Azure SQL 数据仓库)中不可用。
简单例子
╔═══════════════╦═══════╗
║ Id (IDENTITY) ║ Value ║
╠═══════════════╬═══════╣
║ 1 ║ abc ║
║ 2 ║ def ║
╚═══════════════╩═══════╝
作业将插入值“hij”。
╔═══════════════╦═══════╗
║ Id (IDENTITY) ║ Value ║
╠═══════════════╬═══════╣
║ 1 ║ abc ║
║ 2 ║ def ║
║ 3 ║ hij ║
╚═══════════════╩═══════╝
作业应该知道 Id 值 = 3。
注意:执行 MAX(Id) 是行不通的,因为 IDENTITY 列不能保证增量值,同时其他插入可能会进入表。
有人对此有建议的解决方案吗?
最佳答案
截至 2022 年 10 月,Azure Synapse 仍不支持 SCOPE_IDENTITY。
Joel Cochran 的评论中建议的方法似乎是最安全和最合法的方法:
- 在创建作业的应用程序中创建一个 GUID(
your_guid
) - 将
your_guid
和其他工作元数据插入您的工作表 SELECT id FROM job_table WHERE guid = your_guid
到目前为止,这已经运行了 2 年多没有错误。
关于sql - Azure Synapse - 检索插入的行标识值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61679679/