zoukankan      html  css  js  c++  java
  • 利用存储过程实现分页 ,并且多条件查询

    use shifenzheng
    if exists(SELECT name FROM sysobjects WHERE name = 'sp_PageNumSelect1' AND type = 'P')
    drop proc sp_PageNumSelect
    go
    create proc sp_PageNumSelect
    (
    @pageSize int,
    @pageIndex int,
    @name varchar(50),
    @Mobile varchar(50),
    @address varchar(50),
    @zip varchar(6),
    @Email varchar(50),
    @start datetime,
    @end datetime
    )

    as
    declare @strSql varchar(2000) --主语句
    declare @strCountSql varchar(2000) -- 总记录主语句
    declare @strWhere varchar(100)
    set @strWhere=''
    --姓名
    if @name<>''
    begin
    set @strWhere=@strWhere+'name='''+@name+''' and '
    end
    ---手机
    if @Mobile<>''
    begin
    set @strWhere=@strWhere+'Mobile='''+@Mobile+''' and '
    end
    --地址
    if @address<>''
    begin
    set @strWhere=@strWhere+'address like('''+'%'+@address+'%'+''') and '
    end
    --邮编
    if @zip<>''
    begin
    set @strWhere=@strWhere+'zip='''+@zip+''' and '
    end
    --邮箱
    if @Email<>''
    begin
    set @strWhere=@strWhere+'Email='''+@Email+''' and '
    end
    --开始时间
    if @Email<>''
    begin
    set @strWhere=@strWhere+'Version>='''+@start+''' and '
    end
    --结束时间
    if @Email<>''
    begin
    set @strWhere=@strWhere+'Version<='''+@end+''' and '
    end

    if @strWhere<>''
    Begin
    set @strSql='select top ('+str(@pageSize)+') id,Name,ctfid,Gender,Birthday,[Address],Zip,Mobile,Tel,Fax,EMail,Nation,Education,
    Company,[Version] from cdsgus0
    where '+(@strWhere)+' id>isnull((select MAX(id) from cdsgus0 where id in(select top ('+str(@pageSize*(@pageIndex-1))+') id from cdsgus0 where '+@strWhere+' 1=1)),0)';


    set @strCountSql = 'select count(id) from cdsgus0 where '+@strWhere+' 1=1';

    End
    else
    Begin

    set @strSql='select top '+str(@pageSize)+' id,Name,ctfid,Gender,Birthday,[Address],Zip,Mobile,Tel,Fax,EMail,Nation,Education,
    Company,[Version] from cdsgus
    where id>isnull((select MAX(id) from cdsgus where id in(select top ('+str(@pageSize*(@pageIndex-1))+') id from cdsgus)),0)'

    set @strCountSql='select 20000000'
    End

    exec(@strSql);
    exec(@strCountSql);
    go


    exec sp_PageNumSelect 20,1,'','','','','','',''

    其中在sql中 '',两个单引号是转义符号,转义成一个单引号

    一般有变量时出现数据类型转换失败,一般都是sql语句拼接错误造成。将变量转换为字符换类型即可。

    cast(@pageSize as varchar(50))

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

    (利用Not In和SELECT TOP分页)   效率次之,需要拼接SQL语句

    (利用SQL的游标存储过程分页)    效率最差,但是最为通用

    经验在于积累----武二郎
  • 相关阅读:
    LeetCode 326. Power of Three
    LeetCode 324. Wiggle Sort II
    LeetCode 322. Coin Change
    LeetCode 321. Create Maximum Number
    LeetCode 319. Bulb Switcher
    LeetCode 318. Maximum Product of Word Lengths
    LeetCode 310. Minimum Height Trees (DFS)
    个人站点大开发!--起始篇
    LeetCode 313. Super Ugly Number
    LeetCode 309. Best Time to Buy and Sell Stock with Cooldown (DP)
  • 原文地址:https://www.cnblogs.com/zhanghai/p/4461186.html
Copyright © 2011-2022 走看看