我有一个使用sql-server数据库和触发器的PHP应用程序。工作流程如下:
- 我在DB中创建了一个对象,
- 触发器通过在其中插入行来将创建记录到专用表中
- 然后从PHP我得到最后一个插入的ID。
问题是最后插入的ID与日志行有关,而与我的对象无关。
从PHP代码中,我不能以另一种方式做,因为这是由我的ORM(Propel)完成的。所以我必须让它在数据库方面工作。有没有办法实现它,例如通过告诉触发器不被视为"最后插入的id' ?
答案 0 :(得分:1)
您需要在存储过程中使用 SELECT SCOPE_IDENTITY() 来获取在当前会话范围内创建的最后一个ID。
如果您使用其他选项,它将返回Log表的ID。
答案 1 :(得分:0)
您需要使用Scope_Identity()
。这将获取当前会话和范围内生成的最后一个ID(触发器在自己的范围内运行)。
答案 2 :(得分:0)
您有以下几种选择:@@IDENTITY
vs SCOPE_IDENTITY()
vs IDENT_CURRENT
SELECT @@IDENTITY
它返回连接上生成的最后IDENTITY
值,无论生成该值的表如何,也不管生成该值的语句的范围如何。
SELECT SCOPE_IDENTITY()
它返回连接上生成的最后IDENTITY
值以及同一范围内的语句,而不管生成该值的表。
SELECT IDENT_CURRENT(‘tablename’)
它返回表中生成的最后IDENTITY
值,无论创建该值的连接如何,也不管生成该值的语句的范围如何。
IDENT_CURRENT
不受范围和会话的限制;它仅限于指定的表格。 IDENT_CURRENT
返回在任何会话和任何范围内为特定表生成的标识值。