Sql server 2005 如何获取sql server中最后插入的行

Sql server 2005 如何获取sql server中最后插入的行,sql-server-2005,Sql Server 2005,当表中没有Uniqueidentifier或identity列时,如何获取最后插入的行 我在等你的好主意 您需要某种能够识别行的顺序的方法来确定这一点。类似于创建日期或标识列。您不能。表由一组无序的行*组成。例如,如果需要知道插入行的时间,则需要通过添加新列并适当填充来将该信息添加到表定义中 *即使在聚集索引的情况下,总是将表看作是无序的行集更为健康。聚集索引是有用的,但它不能保证任何特定的物理顺序,正如马丁对这个答案的评论所说的那样。您需要某种标识符来提取数据。ID,日期时间。。任何始终与其

当表中没有Uniqueidentifier或identity列时,如何获取最后插入的行


我在等你的好主意

您需要某种能够识别行的顺序的方法来确定这一点。类似于创建日期或标识列。

您不能。表由一组无序的行*组成。例如,如果需要知道插入行的时间,则需要通过添加新列并适当填充来将该信息添加到表定义中


*即使在聚集索引的情况下,总是将表看作是无序的行集更为健康。聚集索引是有用的,但它不能保证任何特定的物理顺序,正如马丁对这个答案的评论所说的那样。您需要某种标识符来提取数据。ID,日期时间。。任何始终与其他行不同的内容。

如果希望从表中获取最后一行而不使用唯一标识符或标识,则可以使用insert触发器

DECLARE @IDs TABLE(id int)

insert into TableName(TableID, TableRowValue)
output inserted.TableID into @IDs
values(857, 'Test');

-插入的标识将在@IDs table变量中

如果通过存储过程插入内容,则应使用SELECT SCOPE\u标识,该标识将返回在当前会话中创建的最后一个标识值,但也会将其限制在当前范围内。 通过这种用法,您将不会获得最后插入的标识,这可能是由触发器引起的


如果要在同一个或被调用的过程中使用result进行插入操作,请记住这一点。

虽然这只是我的观点,但我认为每个表都应该有一个唯一的ID,即使应用程序本身没有使用它。这样做可以解决您的问题,除非表中没有索引。我可以问一下您为什么想要最后一条记录吗?@saret当使用Uniqueidentifier时,仍然无法获取最后一条记录在单个页面中的行不一定按聚集索引排序行偏移量列表是,但偏移量本身可能会乱序。i、 e.如果一个完整的页面有键值为1,2,3,5,6的行,然后删除1并插入4,那么它不会重新组织整个页面,它只会将4粘贴到1所在的位置并更新行偏移量列表。如果这是问题的上下文,您甚至不需要输出表,是吗