近日,sql数据库入门学习群有朋友问到,利用sql如何删除表格的前1000行数据,是否可以实现?

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

delete  from 表名  where rownum<=1000;

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

先查询看下结果集,select * from 表名;

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

如果这样处理会出问题,为什么呢?如果条件是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

(各位朋友如果通过嵌套有办法处理,请公众号回复下哈)

最后想到创建视图来处理,先按排序创建视图,语句如下:

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

通过视图删除前10行数据,语句如下:

delete from 视图名1 where num <=10;

小结:

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

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

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

总结

更多相关文章

  1. 《Android和PHP最佳实践》官方站
  2. android用户界面之按钮(Button)教程实例汇
  3. TabHost与RadioGroup结合完成的菜单【带效果图】5个Activity
  4. Android(安卓)UI开发第十七篇——Android(安卓)Fragment实例(Lis
  5. Android——Activity四种启动模式
  6. Android布局(序章)
  7. Android发送短信方法实例详解
  8. Android(安卓)读取资源文件实例详解
  9. android 蓝牙通讯

随机推荐

  1. This Android(安卓)SDK requires Android
  2. 【30篇突击 android】源码统计 十
  3. Android SDK/ADT 历史版本下载地址
  4. android无线调试
  5. Android EditView 获取焦点 不弹出软键盘
  6. 一步一步学习androidNDK编程(hello world
  7. Android应用开发相关下载资源
  8. Android sms 发送、接收及格式
  9. android:windowSoftInputMode属性使用
  10. Android API Level对应Android版本一览表