阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

sql server如何删除前1000行数据

37次阅读
没有评论

共计 1010 个字符,预计需要花费 3 分钟才能阅读完成。

导读 近日有朋友问到, 利用 sql 如何删除表格的前 1000 行数据, 是否可以实现? 所以下面这篇文章主要给大家介绍了关于 sql server 删除前 1000 行数据的相关资料, 需要的朋友可以参考下

如果是 oracle 数据库管理软件,实现起来相对简单多了

delete  from 表名  where rownum

那 sql server 数据库管理软件呢?

sql server 里没有 rownum 功能,小编尝试用 select top

先查询看下结果集,select * from 表名;
sql server 如何删除前 1000 行数据

delete from 表名 
where 条码 
in (select top 10 条码 from 表名)

-- 注释:由于数据量有限,测试删除前 10 行数据

如果这样处理会出问题,为什么呢?如果条件是 in,那只能是删除前 10 条记录里面的条码范围,这样会造成误删除表中所有的该条码记录,所以此方法行不通。

那能不能类似像 oracle 那样排序呢?sql server 用 row_number() 函数

语句如下:

select  ROW_NUMBER() over (order by 日期) as num  ,* from 表名 

输出结果如下:
sql server 如何删除前 1000 行数据
如上图,既然有序号排序了,那直接删除前 10 行数据

delete from
 (select  ROW_NUMBER() over
 (order by 日期) as num  ,* from 表名 ) tt 
where tt.num

结果是失望的,delete from 不能直接嵌套子查询

(各位朋友如果通过嵌套有办法处理,请公众号回复下哈)
最后想到创建视图来处理,先按排序创建视图,语句如下:

create view 视图名 1 
as
select  ROW_NUMBER() over (order by 日期) as num  ,*  from 表名
go

查询视图,输出结果集如下:
sql server 如何删除前 1000 行数据
通过视图删除前 10 行数据,语句如下:

delete from 视图名 1 where num 

删除表格前 1000 行,把条件改成小于等于 1000 即可

小结:

1、oracle 的 rownum 它是插入数据记录排序,而 sql server 是通过列排序,建议使用前确认是否可以通过创建时间或发生时间排序,以免误删除数据;

2、通过删除表格前 10 行数据方法,加深对视图的了解,对视图的修改,会直接影响基表数据;

3、处理问题时,也不一定非要一条语句得到结果,可以通过创建视图或临时表处理,可能效果会更好,也不容易影响查询性能。

阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

代金券:在阿里云专用满减优惠券

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-07-25发表,共计1010字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中