Sql Server - 如何将最后一个id插入表中

时间:2013-11-02 18:23:35

标签: sql sql-server

我正在尝试将最后一个id插入表中。 我正在使用

SELECT IDENT_CURRENT('TABLE')

但问题是它没有返回最后插入的id,它返回最大插入id。

例如,如果我这样做:

INSERT INTO 'TABLA' (ID) VALUES (100)

SELECT IDENT_CURRENT('TABLE') returns 100

但如果我这样做

INSERT INTO 'TABLA' (ID) VALUES (50)

SELECT IDENT_CURRENT('TABLE') returns 100

我希望得到50

我需要特定表的ID,并且我会以动态方式生成id,因此它不是身份 我该怎么办?

3 个答案:

答案 0 :(得分:5)

从您的代码中看,ID看起来不是身份(自动增量)列,因此IDENT_CURRENT不会按照您的预期执行。

如果要查找插入的最后一行,则需要一个表示插入时间的日期时间列,然后您可以执行以下操作:

SELECT TOP 1 [ID] FROM TABLEA ORDER BY [InsertedDate] DESC

编辑:补充说明:

  • 您的InsertedDate列应默认设置为GetDate(),除非您的应用程序,存储过程或您用于执行插入的任何内容将负责设置值
  • 我说你的ID不是身份/自动增加的原因是因为你要在其中插入一个值。只有在关闭身份插入时才能执行此操作。

答案 1 :(得分:1)

SELECT SCOPE_IDENTITY()

将返回当前会话中插入的最后一个值。
修改
那么你要做的是最好的方法,只需确保ID列是IDENTITY列,IDENT_CURRENT('Table_name'),@ @ IDENTITY和SCOPE_IDENTITY()返回Identity列生成的最后一个值。
如果ID列不是标识列,则所有这些函数都将返回NULL。

答案 2 :(得分:1)

SQL Server无法跟踪插入IDENTITY列的最后一个值,尤其是在使用SET IDENTITY_INSERT ON;时。但是,如果您手动指定要插入的值,则不需要SQL Server来告诉您它是什么。您已经知道它是什么,因为您只是在INSERT语句中明确指定了它。

如果您无法让代码跟踪 刚刚插入 的值,并且无法将表更改为具有默认值的DateInserted列CURRENT_TIMESTAMP(这将允许您查看最后插入的行),也许您可​​以向记录所有插入的表添加触发器。