sqlserver删除前1000⾏数据的⽅法实例
近⽇,sql数据库⼊门学习有朋友问到,利⽤sql如何删除表格的前1000⾏数据,是否可以实现?
如果是oracle数据库管理软件,实现起来相对简单多了
delete  from 表名  where rownum<=1000;
那sql server数据库管理软件呢?
sql server⾥没有rownum功能,⼩编尝试⽤select top
先查询看下结果集,select * from 表名;
delete from 表名
where 条码
in (select top 10 条码 from 表名)
--注释:由于数据量有限,测试删除前10⾏数据
如果这样处理会出问题,为什么呢?如果条件是in ,那只能是删除前10条记录⾥⾯的条码范围,这样会造成误删除表中所有的该条码记录,所以此⽅法⾏不通。
那能不能类似像oracle那样排序呢?sql server ⽤row_number()函数
row_number()函数将针对SELECT语句返回的每⼀⾏,从1开始编号,赋予其连续的编号
必须和over⼀起使⽤
语法如下:
select *,ROW_NUMBER() over(order by productid) as num from product_test;
语句如下:
select  ROW_NUMBER() over (order by ⽇期) as num  ,* from 表名
输出结果如下:
如上图,既然有序号排序了,那直接删除前10⾏数据
delete fromdelete in
(select  ROW_NUMBER() over
(order by ⽇期) as num  ,* from 表名) tt
where tt.num<=10
结果是失望的,delete from 不能直接嵌套⼦查询
(各位朋友如果通过嵌套有办法处理,请回复下哈)
最后想到创建视图来处理,先按排序创建视图,语句如下:
create view 视图名1
as
select  ROW_NUMBER() over (order by ⽇期) as num  ,*  from 表名
go
查询视图,输出结果集如下:
通过视图删除前10⾏数据,语句如下:
delete from 视图名1 where num <=10;
删除表格前1000⾏,把条件改成⼩于等于1000即可
⼩结:
1、oracle的rownum它是插⼊数据记录排序,⽽sql server是通过列排序,建议使⽤前确认是否可以通过创建时间或发⽣时间排序,以免误删除数据;
2、通过删除表格前10⾏数据⽅法,加深对视图的了解,对视图的修改,会直接影响基表数据;
3、处理问题时,也不⼀定⾮要⼀条语句得到结果,可以通过创建视图或临时表处理,可能效果会更好,也不容易影响查询性能。
总结
到此这篇关于sql server删除前1000⾏数据的⽂章就介绍到这了,更多相关sqlserver删除前1000⾏数据内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。