在 Interbase(我使用的是 2007,我不知道是否重要)中是否有一个命令可以获取新插入记录的标识,类似于 SQL Server 中的 SCOPE_IDENTITY() ?
问问题
812 次
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 回答