在Interbase中(我使用2007,我不知道是否重要)是否有命令获取新插入记录的标识,类似于SQL Server中的SCOPE_IDENTITY()?
答案 0 :(得分:2)
不,InterBase实际上没有身份证明功能。
InterBase所具有的是生成器功能。生成器有点像标识,但它们在逻辑上与主键列分开。换句话说,生成器将为您提供有保证的唯一值,但您对该值的处理取决于您。
您可以将该值用作单个表或多个表的主键值。但实际上,分配主键值是您必须自己做的事情。
除了没有像SCOPE_IDENTITY
这样的功能外,InterBase还没有任何功能可以从INSERT
语句返回值。因此,您不仅无法从INSERT
语句中获取生成的主键值,还无法获取任何其他值,例如触发器设置的值。
一种可能的解决方法是提前生成主键值。所以你可以做类似下面的事情(我将在这个例子中使用InterBase存储过程语法,因为我不知道你使用的是什么编程语言,但是你可以用任何编程语言做同样的事情): / p>
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。