如何在没有标识列的SQL服务器中查找最后插入的行

时间:2016-10-13 11:55:59

标签: c# sql sql-server

我创建了如下表格:

create table EmployeeDetails
(
    id int,
    name varchar(50),
    designation varchar(50),
    ReportingTo int
)

并插入如下行:

insert into EmployeeDetails values(1, 'A', 'Developer', 3)
insert into EmployeeDetails values(5, 'E', 'CEO', 5)
insert into EmployeeDetails values(2, 'B', 'Developer', 3)
insert into EmployeeDetails values(3, 'C', 'Manager', 4)
insert into EmployeeDetails values(4, 'D', 'S.Manager', 5)

我的问题是:如何识别表格中最后插入的行?

使用过的查询:

select IDENT_CURRENT('EmployeeDetails')
Select SCOPE_IDENTITY()

但我仍然没有找到答案。

随时欢迎回复

4 个答案:

答案 0 :(得分:6)

评论太长了。

您对关系数据库中的表有一个基本的误解。它们代表无序集。所以,没有"最后一行"在一张桌子里。在创建表和/或将数据加载到其中时,必须包含有关行排序的信息。

在SQL Server中,最简单的方法是标识列。这就是为什么许多表被定义为:

create table EmployeeDetails (
    id int identity primary key,
    name varchar(50),
    designation varchar(50),
    ReportingTo int
);

您还可以添加默认插入时间列:

create table EmployeeDetails (
    id int identity primary key,
    name varchar(50),
    designation varchar(50),
    ReportingTo int,
    CreatedAt datetime default gettime()
);

但是,您可以拥有多个具有相同datetime值的行。

答案 1 :(得分:3)

在表格中添加名称为CreateDate和UpdateDate的datetime类型的字段,当您在表格中插入记录时,设置getdate()的值

之后你可以运行查询:

Select top 10 * from YourTable Order By CreateDate DESC

或上次更新

Select top 10 * from YourTable Order By UpdateDate DESC

答案 2 :(得分:3)

如果添加列

,也可以使用如下所示的rowversion
CREATE TABLE MyTest (myKey int  
    ,myValue int, RV rowversion);  
GO   
INSERT INTO MyTest (myKey, myValue) VALUES (1, 0);  
GO   
INSERT INTO MyTest (myKey, myValue) VALUES (2, 0); 

select * from mytest order by rv desc

注意:
这总是给最后一行插入/更新

<强>参考文献:
rowversion

答案 3 :(得分:1)

请找到我的答案如下。希望这可以帮到你。

再添加一列来存储记录创建日期/时间,如下所示。

create table EmployeeDetails
 (
 id int,
 name varchar(50),
 designation varchar(50),
 ReportingTo int,
 CreatedOn datetime
 )

创建表并插入记录后,执行写/执行查询(此处使用内部查询),如下所示

select
*
from EmployeeDetails 
where CreatedOn = (select max(CreatedOn) from EmployeeDetails )