0

在 Interbase(我使用的是 2007,我不知道是否重要)中是否有一个命令可以获取新插入记录的标识,类似于 SQL Server 中的 SCOPE_IDENTITY() ?

4

1 回答 1

2

不,InterBase 并没有真正的身份特征。

相反,InterBase 拥有的是生成器功能。生成器有点像身份,但它们在逻辑上与主键列分开。换句话说,生成器将为您提供有保证的唯一值,但您如何使用该值取决于您。

您可以将该值用作单个表或多个表的主键值。但实际上分配主键值是您必须自己做的事情。

除了没有类似 的功能外SCOPE_IDENTITY,InterBase 没有任何从INSERT语句返回值的功能。因此,您不仅无法从语句中获取生成的主键值INSERT,也无法获取任何其他值,例如触发器设置的值。

解决方法

一种可能的解决方法是提前生成主键值。因此,您可以执行以下操作(我将在此示例中使用 InterBase 存储过程语法,因为我不知道您使用的是哪种编程语言,但您可以在任何编程语言中执行相同的操作):

DECLARE VARIABLE ID INTEGER;
BEGIN
    ID = SELECT GEN_ID(MY_GENERATOR, 1) FROM RDB$DATABASE;
    INSERT INTO MY_TABLE (ID, DESCRIPTION) VALUES (:ID, "Foo");

RDB$DATABASE是一个只有一条记录的系统表。知道 的值ID,您可以从 proc 中返回它。

第二种解决方法是SELECT使用备用键记录并以这种方式读取生成的 ID。

于 2010-10-07T13:56:17.633 回答