加入收藏 | 设为首页 | 会员中心 | 我要投稿 聊城站长网 (https://www.0635zz.com/)- 智能语音交互、行业智能、AI应用、云计算、5G!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SQL Server里删除表中的千行数据怎么做

发布时间:2023-05-12 14:36:49 所属栏目:MsSql教程 来源:
导读:关于“SQL Server中删除表中的千行数据怎么做”的知识有一些人不是很理解,对此小编给大家总结了相关内容,具有一定的参考借鉴价值,而且易于学习与理解,希望能对大家有所帮助,有这个方面学习需要的朋友
关于“SQL Server中删除表中的千行数据怎么做”的知识有一些人不是很理解,对此小编给大家总结了相关内容,具有一定的参考借鉴价值,而且易于学习与理解,希望能对大家有所帮助,有这个方面学习需要的朋友就继续往下看吧。
 
近日,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 from
 
 (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、处理问题时,也不一定非要一条语句得到结果,可以通过创建视图或临时表处理,可能效果会更好,也不容易影响查询性能。
 
 

(编辑:聊城站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章