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
 
原文地址:https://www.cnblogs.com/chengulv/p/4921479.html