• 1、SQL可搜索可排序可分页存储过程, 2、范围内的随机时间 适用于sql 2008以上


    -- =============================================
    -- Author:        蜘蛛王
    -- Create date: 2015-10-29
    -- Description:    可搜索 可排序 可分页存储过程 适用于sql2008以上 
    --       (非常重要,请认真使用)
    -- =============================================
    
    create PROCEDURE dbo.list 
        ( 
            @table varchar(1000),--表名或视图表        (必须)
            @orderby varchar(1000),--排序字段          (必须)
            @fields varchar(max)='*',--欲选择字段列表  (可选)
            @pageindex int=1,--页号,从1开始               (可选)
            @pagesize int=20,--页尺寸                   (可选)
            @where nvarchar(max) = N'',--条件           (可选) 
            @IsCount bit = 1 -- 返回记录总数, 非 0 值则返回 (可选)
        ) 
    AS
    BEGIN
        SET NOCOUNT ON
        declare @sqlstr nvarchar(max)
        set @sqlstr=''
        set @orderby = ' order by ' + @orderby
        if @where<>N''
            set @where = ' Where ' + @where
        
        --对第一页可以直接用top
        if @pageindex=1
        begin
            set @sqlstr = 'select top ' + CONVERT(varchar(10),@pagesize) + ' ' + @fields + ' from ' + @table + @where + @orderby
        end
        else
        begin
            set @sqlstr = 'with temptbl as ('
            + ' SELECT ROW_NUMBER() OVER ('+ @orderby +') AS Row, '
            + @fields + ' from ' + @table + @where
            + ') SELECT '+ @fields + ' FROM temptbl where Row between ' + CONVERT(varchar(10),(@pageindex-1)*@pagesize+1) + ' and ' + CONVERT(varchar(10),(@pageindex-1)*@pagesize+@pagesize)
            
        end
        if @IsCount!=0
            set @sqlstr = @sqlstr + ';select count(1) from ' + @table + @where
        execute(@sqlstr)
    END
     


    --测试代码
    exec list @table='dl_QQ',@orderby='iid desc',@IsCount=1, @pageindex =2, @fields='iid,qq', @where=' iid <30 '
    exec list @table='dl_QQ',@orderby='iid desc',@IsCount=1, @pageindex =1, @fields='iid,qq', @where=' iid <30 '
    /******************************
    *    函数名:RandDateTime
    *      作用:返回两个时间范围内的一个随机时间
    *    Author: 
    *      Date: 2015-11-13
    *      调用:select dbo.RandDateTime(NEWID(),'2015-11-03 11:24:17','2015-11-03 11:25:17')
    *******************************/
    go
    --创建函数
    alter Function RandDateTime
    (
        @newID uniqueidentifier, -- 用 NEWID()
        @date_from DateTime,    --开始时间
        @date_to DateTime       --结束时间
    )
    Returns DateTime
    As
    Begin
              
        Return CAST(CAST(@date_from AS DECIMAL(18,8)) + -----开始时间 加上一个以天为整的数值作为新的日期
      (   
      ABS(
      CAST(
      CAST( @newID AS Binary(17) )--把生成的一个二进制随机数转化为整数 并取其绝对值
      AS INT
      )
      ) / 10000.0  
      % ----防止随机数过大 取其对开始结束时间差的模
      CAST(
      (@date_to - @date_from) -----获取时间差 并转换成整型
      AS DECIMAL(18,8)
      )
      ) AS DATETIME)
    End
     
  • 相关阅读:
    Stack
    js this理解
    js面向对象
    自执行函数
    原!struts安全漏洞,由2.3.37版本升级至2.5.22
    原!linux机器 配置自动scp脚本
    转!!记一次使用 Arthas 热更新线上代码
    mysql 修改大表字段,报错ERROR 1878 (HY000): Temporary file write failure. 用pt-online-schema-change
    转!!JAVA Future 模式与 Promise 模式
    转!!linux下详解shell中>/dev/null 2>&1
  • 原文地址:https://www.cnblogs.com/chengulv/p/4921479.html
Copyright © 2020-2023  润新知