SQLServer 怎样查询出一个表的最新插入的100条记录

时间:2022-02-10 06:12:48
SQLServer 怎样查询出一个表的最新插入的100条记录,比如我有一个数据库,数据库中有N张表,我想查询出每个表的最新插入的100条记录,表结构都不一样,字段也不一样。有的有主键,有的没有主键。如果有Oracle中的RowID函数就可以解决问题了。在此向大牛,大神们请教。

11 个解决方案

#1


如果有自增列,可以用 
 select top 100 * from [表名] order by [自增列] desc

如果没有自增列,可用触发器,将插入的记录存到自定义表里,自定义表只存最后插入的100条记录.

#2


补充,LZ的需求应可用change tracking实现,推荐一下.
参考  http://msdn.microsoft.com/en-us/library/bb933875(v=sql.105).aspx

#3


自己加一个自增列排序 然后再查询。

#4


oracle 中rowid跟插入时间的顺序没有任何关系
sqlserver中可以中自增列,序列等实现

#5


每个表建一个自增列,或者每个表建一个触发器

#6


要有自增列就比较简单

#7


   感谢楼上的各位大牛,数据库表的结构是不能改变的!所以添加自增列这个可以排除了。请问有没有其它方法,我的目的是想把服务器上的大数据库,拷贝最新的数据到本地作为测试库。

#8


找唯一标识吧,比如说日期,数字之类的

#9


自增列不行的话,要么就用时间列了 。没有时间列的话么……还是等大神解答吧~

#10


     等待大神的回答!

#11



CREATE TABLE [dbo].[inserttest](
[id] [int] NULL,
[name] [nvarchar](100) NULL,
[male] [nvarchar](10) NULL,
[age] [int] NULL
) ON [PRIMARY]

GO

ALTER proc [dbo].[insert_test](@count1 int,@count2 int)--@count1=1,@count2=10000000
as
while(@count1<@count2)
begin
if @count1%2=0
insert into testinsert.dbo.inserttest values(@count1,'a'+CONVERT(nvarchar,@count1 ),'f',@count1)
else
insert into testinsert.dbo.inserttest values(@count1,'a'+CONVERT(nvarchar,@count1 ),'m',@count1)
set @count1=@count1+1
end
exec insert_test 1,101
go
exec insert_test 101,201
go
select a.*
from inserttest a
where a.id not in(select top 100 id from inserttest )
(100 row(s) affected)

#1


如果有自增列,可以用 
 select top 100 * from [表名] order by [自增列] desc

如果没有自增列,可用触发器,将插入的记录存到自定义表里,自定义表只存最后插入的100条记录.

#2


补充,LZ的需求应可用change tracking实现,推荐一下.
参考  http://msdn.microsoft.com/en-us/library/bb933875(v=sql.105).aspx

#3


自己加一个自增列排序 然后再查询。

#4


oracle 中rowid跟插入时间的顺序没有任何关系
sqlserver中可以中自增列,序列等实现

#5


每个表建一个自增列,或者每个表建一个触发器

#6


要有自增列就比较简单

#7


   感谢楼上的各位大牛,数据库表的结构是不能改变的!所以添加自增列这个可以排除了。请问有没有其它方法,我的目的是想把服务器上的大数据库,拷贝最新的数据到本地作为测试库。

#8


找唯一标识吧,比如说日期,数字之类的

#9


自增列不行的话,要么就用时间列了 。没有时间列的话么……还是等大神解答吧~

#10


     等待大神的回答!

#11



CREATE TABLE [dbo].[inserttest](
[id] [int] NULL,
[name] [nvarchar](100) NULL,
[male] [nvarchar](10) NULL,
[age] [int] NULL
) ON [PRIMARY]

GO

ALTER proc [dbo].[insert_test](@count1 int,@count2 int)--@count1=1,@count2=10000000
as
while(@count1<@count2)
begin
if @count1%2=0
insert into testinsert.dbo.inserttest values(@count1,'a'+CONVERT(nvarchar,@count1 ),'f',@count1)
else
insert into testinsert.dbo.inserttest values(@count1,'a'+CONVERT(nvarchar,@count1 ),'m',@count1)
set @count1=@count1+1
end
exec insert_test 1,101
go
exec insert_test 101,201
go
select a.*
from inserttest a
where a.id not in(select top 100 id from inserttest )
(100 row(s) affected)