CSDN博客

img YangYuWeb

交叉查询

发表于2004/10/22 11:48:00  1150人阅读

最基本的处理方法:  
 
如果表中有主键(记录不重复的字段也可以),可以用类似下面的方法,当然x,y要换成具体的数字,不能用变量:  
 
select  top  y  *  from  表  where  主键  not  in(select  top  (x-1)*y  主键  from  表)  
 
 
 
如果表中无主键,可以用临时表,加标识字段解决.这里的x,y可以用变量.  
 
select  id=identity(int,1,1),*    into  #tb  from  表  
select  *  from  #tb  where  id  between  (x-1)*y  and  x*y-1  
---------------------------------------------------------------  
 
--完善一点的,用存储过程实现的通用过程.  
 
/*--用存储过程实现的分页程序  
 
           显示指定查询结果的第X页  
           此存储过程针对无主键的情况,使用临时表的方法  
           如果有主键,不推荐此方法  
 
--邹建  2003.09--*/  
 
/*--调用示例  
           exec  p_show  'select  *  from  xzkh_new..地区资料'  
 
           exec  p_show  'select  *  from  xzkh_new..地区资料',5,2,'地区编号,地区名称,助记码','地区编号'  
--*/  
 
if  exists  (select  *  from  dbo.sysobjects  where  id  =  object_id(N'[dbo].[p_show]')  and  OBJECTPROPERTY(id,  N'IsProcedure')  =  1)  
drop  procedure  [dbo].[p_show]  
GO  
 
CREATE  Proc  p_show  
@QueryStr  nvarchar(1000),            --查询语句,如果查询表,用:select  *  from  表  
@PageSize  int=10,                                    --每页的大小(行数)  
@PageCurrent  int=1,                                    --要显示的页  
@FdShow  nvarchar  (1000)='',            --要显示的字段列表,如果查询结果有标识字段,需要指定此值,且不包含标识字段  
@FdOrder  nvarchar  (1000)=''            --排序字段列表  
as  
declare  @FdName  nvarchar(50)            --标识列名  
           ,@Id1  varchar(20),@Id2  varchar(20)            --开始和结束的记录号  
select  @FdName='[ID_'+cast(newid()  as  varchar(40))+']'  
           ,@Id1=cast(@PageSize*(@PageCurrent-1)  as  varchar(20))  
           ,@Id2=cast(@PageSize*@PageCurrent-1  as  varchar(20))  
           ,@FdShow=case  isnull(@FdShow,'')  when  ''  then  '*'  else  @FdShow  end  
           ,@FdOrder=case  isnull(@FdOrder,'')  when  ''  then  ''  else  '  order  by  '+@FdOrder  end  
 
exec('select  '+@FdName+'=identity(int,0,1),'+@FdShow+'  
                       into  #tb  from('+@QueryStr+')  a  '+@FdOrder+'  
           select  '+@FdShow+'  from  #tb  where  '+@FdName+'  between  '  
           +@Id1+'  and  '+@Id2  
           )  
GO  
阅读全文
0 0

相关文章推荐

img
取 消
img