1、SQL可搜索可排序可分页存储过程, 2、范围内的随机时间 适用于sql 2008以上
2015-10-29 18:27
627 查看
-- ============================================= -- 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
相关文章推荐
- mysql海量数据的优化
- centos6.5 redis 安装配置及java调用
- oralce 动态sql 点位符示例
- PLSQL DEVELOPER 使用的一些技巧【转】 .
- Oracle数据日常使用脚本
- pentaho移植到MySQL
- 阿里云 redis性能测试
- mysql主从复制
- 解决hibernate向mysql插入中文乱码问题
- elasticsearch是否作为nosql 数据库
- mysql 错误解决方案-积累
- 在命令行中mysql导入数据库
- linux平台下误删oracle数据文件
- MySQL命令行导出数据库
- sql server 2008分页
- PetShop学习记录----数据库访问
- Memcache基础教程 && Ubuntu 安装Memcache服务
- 使用原生SQL返回实体类具体实现详情
- mysql的安装
- Oracle 中文数据导入乱码问题解决