【发布时间】:2019-05-19 03:52:33
【问题描述】:
如果我有一个带有自动递增 ID 列的表,我希望能够在该表中插入一行,并获取我刚刚创建的行的 ID。我知道一般来说,StackOverflow 问题需要某种尝试或研究工作的代码,但我不确定从 Snowflake 开始的地方。我已经挖掘了他们的documentation,但我一无所获。
到目前为止,我能做的最好的事情是尝试result_scan() 和last_query_id(),但这些并没有给我任何有关插入行的相关信息,只是确认插入了一行。
我相信我要求的是 MS SQL Server 的 SCOPE_IDENTITY() 函数。
MS SQL Server 的SCOPE_IDENTITY() 是否有 Snowflake 等效函数?
编辑:为了在这里有代码:
CREATE TABLE my_db..my_table
(
ROWID INT IDENTITY(1,1),
some_number INT,
a_time TIMESTAMP_LTZ(9),
b_time TIMESTAMP_LTZ(9),
more_data VARCHAR(10)
);
INSERT INTO my_db..my_table
(
some_number,
a_time,
more_data
)
VALUES
(1, my_time_value, some_data);
我想为我刚刚插入的这一行获得自动增量ROWID。
【问题讨论】:
-
原谅我的无知...你不只是想要 MAX(ROWID) 吗?所以... SELECT MAX(ROWID) FROM my_db.my_table;
-
@JonJaussi 假设有 5-20 个其他进程同时将记录插入到该表中。
MAX(ROWID)可能会抓取由另一个进程在同一时间段内创建的行。 -
感谢您的澄清。您的数据中是否存在“自然键”?您插入的记录中的其他字段的某些串联组合会将记录定义为唯一?这个想法是您可以使用“自然键”查找 ROWID(例如:some_number | a_time | more_data)?
-
@JonJaussi 我现在正在为此做一些事情,但我觉得这样做很草率。我真的希望有一个更合适的方法来获得
ROWID。
标签: sql snowflake-cloud-data-platform