您的位置:首页 > 博客中心 > 数据库 >

SQL 常用的操作

时间:2022-03-14 01:49

一、前5条随机记录

SELECT top 5 * FROM Orders ORDER BY NEWID()

二、生成随机数
select rand(100) from orders

三、删除重复的记录

sql="delete from dv_user where userlastip in (select userlastip from dv_user group by userlastip having (count(*))>1)"

四、三种分页效率分析

     

表中主键必须为标识列,[ID] int IDENTITY (1,1)

  

  1.分页方案一:(利用Not In和SELECT TOP分页)

  SELECT  TOP  10  *  FROM   TestTable
                         WHERE  (Id   NOT   IN (SELECT   TOP   20    id   FROM   TestTable  ORDER BY id  ))
                         ORDER BY     ID

  语句形式:利用Not In和SELECT TOP分页) 效率,需要拼接SQL语句

 

  2.分页方案二:(利用ID大于多少和SELECT TOP分页)

  语句形式:利用ID大于多少和SELECT TOP分页)效率最高,需要拼接SQL语句

SELECT  TOP  10  *  FROM   TestTable
                          WHERE  (ID   >  (SELECT     MAX(id)    FROM

 (SELECT   TOP    20   id  FROM    TestTable  ORDER BY id) 

AST)

)

3.分页方案三:(利用SQL的游标存储过程分页)

语句形式:利用SQL的游标存储过程分页) 效率最差,但是最为通用

   create  procedure SqlPager
 @sqlstr nvarchar(4000),                --查询字符串
 @currentpage int,                      --第N页
 @pagesize int                         --每页行数
 as
 set nocount on
 declare @P1 int,                       --P1是游标的id
  @rowcount int
 exec sp_cursoropen @P1 output,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcount output
 select ceiling(1.0*@rowcount/@pagesize) as 总页数--,@rowcount as 总行数,@currentpage as 当前页 
 set @currentpage=(@currentpage-1)*@pagesize+1
 exec sp_cursorfetch @P1,16,@currentpage,@pagesize 
 exec sp_cursorclose @P1
 set nocount off

热门排行

今日推荐

热门手游