如何从SQL表中删除最后一行的Id

时间:2009-11-13 19:16:38

标签: sql sql-server

我正在尝试使用max(Id)函数获取最后一个Id,其中Id是主键。除非我删除表中的最后一行,否则我的代码运行良好,因为当我删除最后一行时,仍然保留该Id,在这种情况下,max(Id)将检索最后一行Id,但不会检索从表中删除的Id。

是否有任何函数可以检索最后一行删除的Id。我看过一些使用scope_identity()@@identity函数的帖子来获取当前的ID。我使用过这些功能,但它们无法正常工作。我在dll文件中编辑我的代码可能是dat正在创建问题。

3 个答案:

答案 0 :(得分:4)

如果您使用的是SQL 2005或更高版本,则可以使用OUTPUT子句获取已删除行的ID。

Check out this link for a nice example

答案 1 :(得分:3)

您可以创建TRIGGER FOR DELETE事件,并在日志表中插入已删除的记录。

CREATE TABLE LogDeletetable 
(
    ID          int           IDENTITY(1,1) PRIMARY KEY CLUSTERED,
    [datedelete] smalldatetime NOT NULL DEFAULT Getdate(),
    ExtID int
 )

CREATE TRIGGER TriggerONDELETE
ON MyTable
FOR DELETE
AS
DECLARE @ID int    
SET @ID = (SELECT ID FROM deleted)    
INSERT Logtable (ExtID ) VALUES(@ID)
GO

然后,您可以针对已删除的记录查询表myLogtable。

Select * FROM Logtable 

答案 2 :(得分:1)

@@ Identity和Scope_Identity()仅返回当前会话的最新标识值

要获取曾被分配到表的最高标识值(即使其中一些已被删除),您也可以使用Ident_Current

BOL将其描述如下: IDENT_CURRENT返回在任何会话和任何范围

中为特定表生成的最后一个标识值

http://msdn.microsoft.com/en-us/library/ms175098.aspx