我正在尝试使用max(Id)函数获取最后一个Id,其中Id是主键。除非我删除表中的最后一行,否则我的代码运行良好,因为当我删除最后一行时,仍然保留该Id,在这种情况下,max(Id)将检索最后一行Id,但不会检索从表中删除的Id。
是否有任何函数可以检索最后一行删除的Id。我看过一些使用scope_identity()
和@@identity
函数的帖子来获取当前的ID。我使用过这些功能,但它们无法正常工作。我在dll文件中编辑我的代码可能是dat正在创建问题。
答案 0 :(得分:4)
如果您使用的是SQL 2005或更高版本,则可以使用OUTPUT子句获取已删除行的ID。
答案 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返回在任何会话和任何范围
中为特定表生成的最后一个标识值