sql - Azure Synapse - 检索插入的行标识值

标签 sql azure-sql-data-warehouse azure-synapse

我们有一个 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 的评论中建议的方法似乎是最安全和最合法的方法:

  1. 在创建作业的应用程序中创建一个 GUID(your_guid)
  2. your_guid 和其他工作元数据插入您的工作表
  3. SELECT id FROM job_table WHERE guid = your_guid

到目前为止,这已经运行了 2 年多没有错误。

关于sql - Azure Synapse - 检索插入的行标识值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61679679/

相关文章:

php - 我对两个表的选择无法正常工作

sql-server - 我可以更改作为表加载到 SQL Server 的 Spark 数据框列的数据类型吗?

azure - 将 parquet 文件从 Azure 数据湖存储帐户复制到 Synapse 数据仓库表失败

sql-server - 在 T-SQL 中声明游标时出现语法错误

SQL 过程 : Removing duplicates, 重新分配外键引用

php - 对 mysql 的搜索结果进行排序

mysql - SQL - 记录两个日期之间和日期

python-3.x - 您知道如何在 Databricks 集群上安装 'ODBC Driver 17 for SQL Server' 吗?

azure-data-factory-2 - 当我们有 Polybase 时为何选择 Azure Data Factory