6个表,4个变量,要实现最多组合功能的存储过程
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




