CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  疑难问题

6个表,4个变量,要实现最多组合功能的存储过程

楼主Devin_lee(感觉)2006-03-10 02:44:11 在 MS-SQL Server / 疑难问题 提问

4个变量  
  @MaxNumber   int, /*指定要显示的条数*/  
  @Category   int, /*指定要显示的类别*/  
  @Condition   varchar   (20), /*查询条件,是指   Where   @Condition=1   ,这个@Condition是外部进来的值,如   isGood   等*/  
  @SortOrder   varchar   (20) /*排序方式,是指按照指定的字段进行降序或升序排序   */  
   
  6个表  
   
  AAA表  
   
  aID       Title           Hits           Passed             PostDate                   isGood       Category       ...  
  1         A表标题一             1                 1             2006-3-2   0:12:11               1                 1  
  2         A表标题二             2                 1             2006-3-7   0:12:11               0                 1  
  3         A表标题三             5                 0             2006-3-4   4:12:11               0                 1  
  4         A表标题四             8                 1             2006-3-10   8:12:11             0                 1  
  5         A表标题五             7                 1             2006-3-11   7:12:11             1                 1  
   
  BBB表  
   
  bID         Title           Hits         Passed         PostDate                       isGood       Category       ...  
  1           B表标题一         5                   0         2006-3-7   0:12:11                 1                 2  
  2           B表标题二         4                   1         2006-3-9   0:12:11                 0                 2  
  3           B表标题三         0                   1         2006-3-9   0:12:11                 1                 2  
  4           B表标题四         8                   1         2006-3-10   6:12:11               0                 2  
  5           B表标题五         2                   1         2006-3-11   6:12:11               0                 2  
   
  CCC表  
   
  cID       Title           Hits           Passed         PostDate                       isGood       Category       ...  
  1           C表标题一         8                   1         2006-3-2   0:12:11                 0                 3  
  2           C表标题二         5                   0         2006-3-7   0:12:11                 0                 3  
  3           C表标题三         4                   0         2006-3-9   0:12:11                 1                 3  
  4           C表标题四         5                   1         2006-3-9   5:12:11                 0                 3  
  5           C表标题五         3                   0         2006-3-11   0:12:11               0                 3  
   
  DDD表  
   
  dID         Title         Hits         Passed           PostDate                     isGood       Category       ...  
  1         D表标题一         4                   0           2006-3-7   0:12:11               0                 4  
  2         D表标题二         6                   1           2006-3-7   0:12:11               0                 4  
  3         D表标题三         7                   1           2006-3-7   0:12:11               0                 4  
  4         D表标题四         8                   1           2006-3-10   4:12:11             0                 4  
  5         D表标题五         9                   0           2006-3-11   0:12:11             1                 4  
   
  EEE表  
   
  eID         Title         Hits       Passed             PostDate                   isGood       Category       ...  
  1           E表标题一         4                 1           2006-3-1   0:12:11               0                 5  
  2           E表标题二         6                 1           2006-3-4   0:12:11               0                 5  
  3           E表标题三         7                 1           2006-3-7   0:12:11               0                 5  
  4           E表标题四         8                 1           2006-3-10   0:12:11             1                 5  
  5           E表标题五         9                 1           2006-3-11   3:12:11             0                 5  
   
  FFF表  
   
  fID         Title       Hits         Passed             PostDate                   isGood       Category       ...  
  1           F表标题一       5                   1         2006-3-7   0:12:11               0                 6  
  2           F表标题二       4                   1         2006-3-10   0:12:11             0                 6  
  3           F表标题三       0                   0         2006-3-10   0:12:11             0                 6  
  4           F表标题四       8                   1         2006-3-10   0:12:11             0                 6  
  5           F表标题五       2                   1         2006-3-10   2:12:11             1                 6  
   
  以上是要查询的6个表  
   
  条件是   Passed=1  
   
  现在要结合6个表中的信息  
   
  是根据变量实现以下的可能  
  1、6条按时间降序最新最近的信息,如在变量值分别为:@MaxNumber   int=6,@Category   int=0   /*0表示不限分类*/,@Condition   varchar   (20)="All"   /*All表示不限条件,但不排除Passed=1*/,@SortOrder   varchar   (20)="PostDate"   /*按时间降序排序*/  
  2、6条指定的@Category分类的降序排序,如在变量值分别为:@MaxNumber   int=6,@Category   int=1,@Condition   varchar   (20)="All"   /*All表示不限条件,但不排除Passed=1*/,@SortOrder   varchar   (20)="PostDate"   /*按时间降序排序*/  
  3、6条指定的@Condition条件的降序排序,如在变量值分别为:@MaxNumber   int=6,@Category   int=0   /*0表示不限分类*/,@Condition   varchar   (20)="isGood"   /*表示isGood=1*/,@SortOrder   varchar   (20)="PostDate"   /*按时间降序排序*/  
  4、6条指定的@SortOrder降序排序的信息,如在变量值分别为:@MaxNumber   int=6,@Category   int=0   /*0表示不限分类*/,@Condition   varchar   (20)="All"   /*All表示不限条件,但不排除Passed=1*/,@SortOrder   varchar   (20)="Hits"   /*按Hits字段指定降序排序*/  
  5、.........  
   
  可能会很多种不同组合,但都会是有一定规律的,都是围绕着这4个变量转,这个过程有没有办法实现,或者是否有更好的解决方案,但希望是用最少条的过程,做最多“组合式”的查询功能,当然效率也重要。  
  如果说得不明白,我会再详细一些。  
   
  如果分不够,可以开帖加  
  问题点数:100、回复次数:6Top

1 楼wgsasd311(自强不息)回复于 2006-03-10 08:31:32 得分 0

楼主没有把变量介绍清楚   :  
  @MaxNumber   int=6,请问数字6只是代表TOP   6吗?  
  ,@Condition   varchar   (20)="All"   请问他的格式?  
  ,@SortOrder   varchar   (20)="PostDate"  
    /*按时间降序排序*/,请问怎样区分升序和绛序?  
  所有的查询是否都是联合6张表?  
  Top

2 楼Devin_lee(感觉)回复于 2006-03-10 08:48:21 得分 0

楼主没有把变量介绍清楚   :  
  @MaxNumber   int=6,请问数字6只是代表TOP   6吗?  
  ,@Condition   varchar   (20)="All"   请问他的格式?  
  ,@SortOrder   varchar   (20)="PostDate"  
    /*按时间降序排序*/,请问怎样区分升序和绛序?  
  所有的查询是否都是联合6张表?  
  -------------------------------------------------------------  
  @MaxNumber   int=6,请问数字6只是代表TOP   6吗?  
  -   是由这个变量决定返回6要信息,不限定是Top   6   还是   IF   (@MaxNumber   >   0)   SET   ROWCOUNT   @MaxNumber,只是能是能返回@MaxNumber指定的条数就行了  
   
  @Condition   varchar   (20)="All"   请问他的格式?  
  -   格式就是对应数据库的字段,All是指不限条件,比如 这个值可以是"isGood"、"isHot"等,意思是要让这个字段的值为真,就也是Where   isGood=1、Where   isHot=1   这样  
   
  @SortOrder   varchar   (20)="PostDate"   /*按时间降序排序*/,  
  -   全部将序,也就是是 Order   By   PostDate   Desc、Order   By   Hits   Desc,目的是指定用来排序的字段  
   
  所有的查询是否都是联合6张表?  
  -   不一定,如果@Category指定为0,就是全表,如果值是1,则只是AAA表,值是2,则是BBB表Top

3 楼wgsasd311(自强不息)回复于 2006-03-10 09:14:55 得分 100

--1.先建包含6个表的视图  
  create   view   v_1   as  
  select   *   from   (  
  select   *   from   aaa  
  union   alll  
  select   *   from   bbb  
  union   alll  
  select   *   from   ccc  
  union   alll  
  select   *   from   ddd  
  union   alll  
  select   *   from   eee  
  union   alll  
  select   *   from   fff  
  )   a    
  where   Passed=1  
  go  
   
  create   proc   p  
  @MaxNumber   int, /*指定要显示的条数*/  
  @Condition   varchar   (20),/*查询条件格式如     isGood=1   and   Category=1*/  
  @SortOrder   varchar   (20)   /*指定按降序排序的字段*/  
  as  
  declare   @sql   varchar(4000)  
  set   rowcount   @maxnumber  
  set   @sql='select   *   from   v_1   '  
  if   rtrim(@condition)<>''  
  set   @sql=@sql+'   where   '+@condition  
  set   @sql=@sql+'   order   by   '+@sortorder+'   desc'  
  exec(@sql)  
  go  
  --调用事例:  
  /*,@Category   int=0   0表示不限分类*varchar   (20)="PostDate"   按时间降序排序*/  
  exec   p   6,'','PostDate'  
  /*6条指定的@Category分类的降序排序,如在变量值分别为:  
  @MaxNumber   int=6,@Category   int=1,@Condition   varchar   (20)="All"    
  @SortOrder   varchar   (20)="PostDate"   按时间降序排序*/  
  exec   p   6,'Category=1','postdate'  
  Top

4 楼Devin_lee(感觉)回复于 2006-03-10 13:40:45 得分 0

调用事例,还真没有搞过,我是用asp.net(c#),可否说一下,怎么个调法?Top

5 楼wgsasd311(自强不息)回复于 2006-03-10 14:11:00 得分 0

楼主可把我难住了,我不会C#的.Top

6 楼Devin_lee(感觉)回复于 2006-03-10 22:07:37 得分 0

谢谢 wgsasd311(自强不息)  
  等我把调用事例搞一下,如果这方法对了,给你结帖.Top

相关问题

  • 存储过程中的变量列表问题
  • 在存储过程中如何使用表名变量?
  • 关于存储过程中的表名可否使用变量?
  • 在存储过程中表名能做变量传吗?
  • 存储过程中怎样把表名作为变量??
  • 表名为变量的存储过程怎么写?
  • 表变量与存储过程的问题
  • 请教,如何向存储过程传递表变量?
  • 存储过程中表名能使用变量来代替吗?
  • 两个存储过程之间可以传递表变量吗?

关键词

  • c#
  • 排序
  • 字段
  • 查询
  • 数字
  • top
  • postdate
  • maxnumber
  • 变量
  • 表标题

得分解答快速导航

  • 帖主:Devin_lee
  • wgsasd311

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo