--//***显示分页  
     if @strCondition is null or @strCondition=''     --没有设置显示条件  
     begin  
         if @pageIndex<2 or @page<=@pageIndex / 2 + @pageIndex % 2   --前半部分数据处理  
             begin   
                 if @page=1  
                     set @strTmp=@SqlSelect+' top '+ CAST(@pageSize as VARCHAR(40))+' '+ @fldName+' from '+@tblName                          
                         +' order by '+ @ID+' '+ @strFSortType+@fldSort
                 else  
                 begin                      
                     set @strTmp=@SqlSelect+' top '+ CAST(@pageSize as VARCHAR(40))+' '+ @fldName+' from '+@tblName  
                         +' where '+@ID  
                     if @Sort=0  
                        set @strTmp = @strTmp + '<(select min('  
                     else  
                        set @strTmp = @strTmp + '>(select max('  
                     set @strTmp = @strTmp + @ID +') from ('+ @SqlSelect+' top '+ CAST(@pageSize*(@page-1) as Varchar(20)) +' '+ @ID +' from '+@tblName  
                         +' order by '+ @ID+' '+ @strFSortType+@fldSort+') AS TBMinID)'  
                         +' order by '+ @ID+' '+ @strFSortType+@fldSort
                 end      
             end  
         else  
              begin  
             set @page = @pageIndex-@page+1 --后半部分数据处理  
                 if @page <= 1 --最后一页数据显示              
                     set @strTmp=@SqlSelect+' * from ('+@SqlSelect+' top '+ CAST(@lastcount as VARCHAR(40))+' '+ @fldName+' from '+@tblName  
                         +' order by '+ @ID +' '+ @strSortType+@fldSort+') AS TempTB'+' order by '+ @ID+' '+ @strFSortType+@fldSort 
                 else  
                     begin  
                     set @strTmp=@SqlSelect+' * from ('+@SqlSelect+' top '+ CAST(@pageSize as VARCHAR(40))+' '+ @fldName+' from '+@tblName  
                         +' where '+@ID  
                         if @Sort=0  
                            set @strTmp=@strTmp+' <(select min('  
                         else  
                            set @strTmp=@strTmp+' >(select max('  
  set @strTmp=@strTmp+ @ID +') from('+ @SqlSelect+' top '+ CAST(@pageSize*(@page-2)+@lastcount as Varchar(20)) +' '+ @ID +' from '+@tblName  
                         +' order by '+ @ID +' '+ @strSortType+@fldSort+') AS TBMaxID)'  
                         +' order by '+ @ID +' '+ @strSortType+@fldSort+') AS TempTB'+' order by '+ @ID+' '+ @strFSortType+@fldSort 
                    end  
             end  
      end  
      else --有查询条件  
     begin  
         if @pageIndex<2 or @page<=@pageIndex / 2 + @pageIndex % 2   --前半部分数据处理  
         begin  
                 if @page=1  
                     set @strTmp=@SqlSelect+' top '+ CAST(@pageSize as VARCHAR(40))+' '+ @fldName+' from '+@tblName                          
                         +' where 1=1 ' + @strCondition + ' order by '+ @ID+' '+ @strFSortType+@fldSort
                 else  
                 begin                      
                     set @strTmp=@SqlSelect+' top '+ CAST(@pageSize as VARCHAR(40))+' '+ @fldName+' from '+@tblName  
                         +' where '+@ID  
                     if @Sort=0  
                        set @strTmp = @strTmp + '>(select max('  
                     else  
                        set @strTmp = @strTmp + '<(select min('  
   
                  set @strTmp = @strTmp + @ID +') from ('+ @SqlSelect+' top '+ CAST(@pageSize*(@page-1) as Varchar(20)) +' '+ @ID +' from '+@tblName  
                         +' where (1=1) ' + @strCondition +' order by '+ @ID+' '+ @strFSortType+@fldSort+') AS TBMinID)'  
                         +' '+ @strCondition +' order by '+ @ID+' '+ @strFSortType+@fldSort
                 end              
         end  
         else  
         begin   
             set @page = @pageIndex-@page+1 --后半部分数据处理  
             if @page <= 1 --最后一页数据显示  
                     set @strTmp=@SqlSelect+' * from ('+@SqlSelect+' top '+ CAST(@lastcount as VARCHAR(40))+' '+ @fldName+' from '+@tblName  
                         +' where (1=1) '+ @strCondition +' order by '+ @ID +' '+ @strSortType+@fldSort+') AS TempTB'+' order by '+ @ID+' '+ @strFSortType+@fldSort                     
             else  
                   begin  
                     set @strTmp=@SqlSelect+' * from ('+@SqlSelect+' top '+ CAST(@pageSize as VARCHAR(40))+' '+ @fldName+' from '+@tblName  
                         +' where '+@ID  
                     if @Sort=0  
                        set @strTmp = @strTmp + '<(select min('  
                     else  
                        set @strTmp = @strTmp + '>(select max('  
                set @strTmp = @strTmp + @ID +') from('+ @SqlSelect+' top '+ CAST(@pageSize*(@page-2)+@lastcount as Varchar(20)) +' '+ @ID +' from '+@tblName  
                         +' where (1=1) '+ @strCondition +' order by '+ @ID +' '+ @strSortType+@fldSort+') AS TBMaxID)'  
                         +' '+ @strCondition+' order by '+ @ID +' '+ @strSortType+@fldSort+') AS TempTB'+' order by '+ @ID+' '+ @strFSortType+@fldSort  
                  end                
         end      
     end  
 ------返回查询结果-----  
--SET NOCOUNT off  
print @strTmp  
 exec sp_executesql @strTmp  
print @strTmp  

解决方案 »

  1.   

    too   looooooooooogggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
      

  2.   

    太长了,又没环境。
    有环境,测试是问题暴露最快的方式。 代码太长,经验查找太累。不要直接exec,这样的报错信息是运行时错误,报错不准的。
    把print出的sql语句,粘出来执行,看哪错了,直接就找到了。然后再看错的语句是在什么地方生成的。
    基本的排错过程就是这样,自己看下吧。
      

  3.   

    在程序中插入一些 print @strTmp,看看是在哪儿出的语法错误.
      

  4.   

    print 拼接的sql语句,一步一步的调试,总会发现问题的