我创建了如下表格:
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()
但我仍然没有找到答案。
随时欢迎回复
答案 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)
如果添加列
,也可以使用如下所示的rowversionCREATE 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 )