if(@docount=1)
select count(id) from jplp where @sfield like '%'+@skey+'%' 
-------------------------
@sfield like '%'+@skey+'%'
的  @sfield

解决方案 »

  1.   

    CREATE procedure JplpGetListBySrh(
    @sfield    nvarchar(20),
    @skey      nvarchar(20),
    @pagesize  int,
    @pageindex int,
    @docount   bit)
    as
    begin
        set nocount on
        if(@docount=1)
    exec('select count(id) from jplp where '+@sfield+' like ''%'+@skey+'%''')
        else
        begin
            declare @indextable table(id int identity(1,1),nid int)
            declare @PageLowerBound int
            declare @PageUpperBound int
            set @PageLowerBound=(@pageindex-1)*@pagesize
            set @PageUpperBound=@PageLowerBound+@pagesize
            set rowcount @PageUpperBound
            exec('insert into '+@indextable+'(nid) select Id from jplp where '+@sfield+' like '''%'+@skey+'%''' order by fbsj desc
            select O.id,O.UserName,O.Cata,O.XiaoQm,O.JiaG,O.Lxr,O.Tel,O.Sh,O.Tj,O.Fbsj from jplp O,'+@indextable+' t where O.id=t.nid
            and t.id>'+rtrim(@PageLowerBound)+' and t.id<='+rtrim(@PageUpperBound)+' order by t.id DESC')  
        end
        set nocount off
    end
    GO
      

  2.   

    if(@docount=1)
    select count(id) from jplp where @sfield like '%'+@skey+'%' 
    -------------------------------
    ---〉
    if(@docount=1)
       declare @sqlTmp varchar(20)
       set @sqlTmp =   
             'select count(id) from jplp where '+@sfield+ ' like ''%''+@skey+''%''' 
       exec(@sqlTmp)
      

  3.   

    select count(id) from jplp where @sfield like '%'+@skey+'%' 
    改成 exec('select count(id) from jplp where'+ @sfield +'like ''%'+@skey+'%''' )
      

  4.   

    哦,对,栏位名和表名不能使用变量:
    select count(id) from jplp where @sfield like '%'+@skey+'%'
      

  5.   

    我知道了
    CREATE procedure JplpGetListBySrh(
    @sfield    nvarchar (20),
    @skey    nvarchar (20),
    @pagesize int,
    @pageindex int,
    @docount bit
    )
    as
    set nocount on
    if(@docount=1)
    exec('select count(id) from jplp where '+ @sfield + ' like '''%'''+@skey+'''%'''') 
    else
    begin
    create table indextable (id int identity(1,1),nid int)
    declare @PageLowerBound int
    declare @PageUpperBound int
    set @PageLowerBound=(@pageindex-1)*@pagesize
    set @PageUpperBound=@PageLowerBound+@pagesize
    set rowcount @PageUpperBound
    exec('insert into indextable(nid) select Id from jplp  where '+@sfield+ ' like '''%'''+@skey+'''%'  order by fbsj desc')
    select O.id,O.UserName,O.Cata,O.XiaoQm,O.JiaG,O.Lxr,O.Tel,O.Sh,O.Tj,O.Fbsj from jplp O,@indextable t where O.id=t.nid
    and t.id>@PageLowerBound and t.id<=@PageUpperBound order by t.id DESC
    end
    set nocount off
    GO
      

  6.   

    用了你这个出现,必须声明变量@indextable
      

  7.   

    动态语法
    select count(id) from jplp where @sfield like '%'+@skey+'%' ......
    用EXEC(.....)
      

  8.   

    exec('insert into '+@indextable+'(nid) select Id from jplp where '+@sfield+' like '''%'+@skey+'%''' order by fbsj desc
            select O.id,O.UserName,O.Cata,O.XiaoQm,O.JiaG,O.Lxr,O.Tel,O.Sh,O.Tj,O.Fbsj from jplp O,'+@indextable+' t where O.id=t.nid
            and t.id>'+rtrim(@PageLowerBound)+' and t.id<='+rtrim(@PageUpperBound)+' order by t.id DESC')  
    这个语句还有问题
      

  9.   

    /*
    *=======================================
    *Author:   Amour
    *Description: JplpGetListBySrh
    *Released: 2006-2-16 16:53:02
    *=======================================
    */
    CREATE procedure JplpGetListBySrh(
    @sfield    nvarchar (20),
    @skey    nvarchar (20),
    @pagesize int,
    @pageindex int,
    @docount bit
    )
    as
    set nocount on
    if(@docount=1)
    exec('select count(id) from jplp where '+@sfield+' like ''%'+@skey+'%''')
    else
    begin
    declare @indextable table(id int identity(1,1),nid int)
    declare @PageLowerBound int
    declare @PageUpperBound int
    set @PageLowerBound=(@pageindex-1)*@pagesize
    set @PageUpperBound=@PageLowerBound+@pagesize
    set rowcount @PageUpperBound
    ------下面这行有错
      exec('insert into @indextable (nid) select Id from jplp where '+@sfield+' like ''% '+@skey+' %'' order by fbsj desc')
    ------上面这行有错
             select O.id,O.UserName,O.Cata,O.XiaoQm,O.JiaG,O.Lxr,O.Tel,O.Sh,O.Tj,O.Fbsj from jplp O,@indextable t where O.id=t.nid
    and t.id>@PageLowerBound and t.id<=@PageUpperBound order by t.id DESC
    end
    set nocount off
    GO
    执行出现以下错误服务器: 消息 137,级别 15,状态 2,行 1
    必须声明变量 '@indextable'。
      

  10.   

    在 EXEC() 的SQL语句中使用  @变量  会有“必须声明变量” 问题
    到现在我也不知道有什么好方法
    我遇到这种情况的时候
    就是声明 create  一个表放在库中
    用完了  再drop 就像你原来写的那样CREATE procedure JplpGetListBySrh(
    @sfield    nvarchar (20),
    @skey    nvarchar (20),
    @pagesize int,
    @pageindex int,
    @docount bit
    )
    as
    set nocount on
    if(@docount=1)
    exec('select count(id) from jplp where '+@sfield+' like ''%'+@skey+'%''')
    else
    begin
    --create
    create table indextable (id int identity(1,1),nid int)
    declare @PageLowerBound int
    declare @PageUpperBound int
    set @PageLowerBound=(@pageindex-1)*@pagesize
    set @PageUpperBound=@PageLowerBound+@pagesize
    set rowcount @PageUpperBound exec('insert into indextable (nid) select Id from jplp where '+@sfield+' like ''% '+@skey+' %'' order by fbsj desc')        select O.id,O.UserName,O.Cata,O.XiaoQm,O.JiaG,O.Lxr,O.Tel,O.Sh,O.Tj,O.Fbsj from jplp O,indextable t where O.id=t.nid
    and t.id>@PageLowerBound and t.id<=@PageUpperBound order by t.id DESC
    end
    --加一句  drop
    drop table indextable set nocount off
    GO试一下 , 看看  还有什么问题吗???
      

  11.   

    那就是
    select O.id,O.UserName,O.Cata,O.XiaoQm,O.JiaG,O.Lxr,O.Tel,O.Sh,O.Tj,O.Fbsj from jplp O,indextable t where O.id=t.nid
    and t.id>@PageLowerBound and t.id<=@PageUpperBound order by t.id DESC
    这句话没结果咯
      

  12.   

    应该不是啊,
    我看了indextable里面的数据是空的
      

  13.   

    那么我给个意见,楼主先不要把它打入表,你先用部分内容做做测试,看看能不能正常查到数据!CREATE procedure JplpGetListBySrh(
    @sfield    nvarchar (20),
    @skey    nvarchar (20),
    @pagesize int,
    @pageindex int,
    @docount bit
    )
    as
    set nocount on
    if(@docount=1)
    exec('select count(id) from jplp where '+@sfield+' like ''%'+@skey+'%''')
    else
    begin
    --create
    declare @PageLowerBound int
    declare @PageUpperBound int
    set @PageLowerBound=(@pageindex-1)*@pagesize
    set @PageUpperBound=@PageLowerBound+@pagesize
    set rowcount @PageUpperBoundselect Id from jplp where '+@sfield+' like ''% '+@skey+' %'' order by fbsj desc
    set nocount off
    GO
      

  14.   

    谢谢各位的捧场!!我用另一种分页方法实现了CREATE procedure JplpGetListBySrh(
    @sfield    nvarchar (20),
    @skey    nvarchar (20),
    @pagesize int,
    @pageindex int,
    @docount bit
    )
    as
    set nocount on
    if(@docount=1)
    exec('select count(id) from jplp where '+@sfield+' like ''%'+@skey+'%''')
    else
        begin

    if (@pageindex=1)
    exec('SELECT TOP '+@pagesize+' O.id,O.UserName,O.Cata,O.XiaoQm,O.JiaG,O.Lxr,O.Tel,O.Sh,O.Tj,O.Fbsj   FROM Jplp O WHERE '+@sfield+' like ''%'+@skey+'%''  ORDER BY ID')
    else
    declare @pagecount int
    set @pagecount=@pagesize*(@pageindex-1)
    exec('SELECT TOP '+@pagesize+' O.id,O.UserName,O.Cata,O.XiaoQm,O.JiaG,O.Lxr,O.Tel,O.Sh,O.Tj,O.Fbsj   FROM Jplp O WHERE '+@sfield+' like ''%'+@skey+'%'' and (ID >  (SELECT MAX(id)  FROM (SELECT TOP '+@pagecount+' id   FROM Jplp   where '+@sfield+' like ''%'+@skey+'%'' ORDER BY id) AS T))  ORDER BY ID')
        end
    set nocount off
    GO