任意条件选择:怎样构造sql语句?用模式么?用什么模式?
在查询数据库时,有很多地方会遇到选择0个到n个条件中若干个进行查询的?
因此,可能的sql语句组合多达几十种,这么多,要一个个的写sql语句,真是烦死人了!
select * from table where id = @id [and columnName_1 = @value_1...[columnName_n = @value_n]]
怎么设计sql语句?
问题点数:20、回复次数:11Top
1 楼tql312400(屠步空杯)回复于 2004-12-03 12:48:49 得分 5
EXEC SQL SELECT * FROM 表名一 WHERE 字段1=:变量1 AND ... AND 字段N=:变量N;
其中变量声明在
EXEC SQL BEGIN DECLARE SECTION;
类型 变量1;
...
类型 变量N
EXEC SQL END DECLARE SECTION;Top
2 楼bluesage(海蓝色)回复于 2004-12-03 12:54:38 得分 5
BUILDER模式,是不是能构造一个符合要求的SQL语句Top
3 楼thenew_(好吃的尽管吃,好玩的尽管玩)回复于 2004-12-03 16:40:22 得分 0
totql312400(屠步空杯) :
这种方法好像不行
比如对于一个表有 性别、年龄、民族、姓名 四个字段,
随便怎么输入都能查得所要结果,中间的and怎么弄?
select * from table where sex = @sex and age = @age
select * from table where age = @age and name = @name
select * from table where name = @name and aa = @aa,
语句数很多啊,而且都得硬编码
Top
4 楼Squall1009(钰枫)(找工作ing)回复于 2004-12-03 23:23:22 得分 5
不能加上逻辑非吗?Top
5 楼Squall1009(钰枫)(找工作ing)回复于 2004-12-03 23:23:33 得分 5
说错了逻辑或Top
6 楼thenew_(好吃的尽管吃,好玩的尽管玩)回复于 2004-12-04 12:48:13 得分 0
to Squall1009(钰枫)(我思故我在) :
这样能解决一个问题:
select * from table where id = @id or name = @name or sex = @sex
其他的,比如只提供了一个条件,而这个条件是id?name?sex?我并不知道,
或者提供了两个条件,而这个两个条件是name和sex?sex和age?我也不知道,
或者提供了三个条件,而这个三个条件我也不知道,因此,
逻辑或不能解决所有问题。
没办法,本人懒,不想把所有可能的条件都列出来,
因此只好求助了Top
7 楼classrect(以前的号丢了,郁闷)回复于 2004-12-06 12:49:24 得分 0
类似MVC 模式,认为sql语句的内容是 M,这样将其存在文件里(xml文件或自定义)
使用时将其序列化到buf里,在执行。而不是硬编码!!!!
这样耦合最小,程序只和sqlbuf有关! sql内容在外边可以编辑!
这样将“数据”和“逻辑”分离!
也不知道我说的对不对,呵呵Top
8 楼sandrowjw(我的小猫照片给弄坏了,心都碎了)回复于 2004-12-07 10:53:52 得分 0
楼主你的字段个数和名称总是确定的吧,如果不确定的只好写成proc了
确定的话可以简单一些,比如这样
select * from table where (@name = '' or name = @name) and (@sex = '' or sex = @sex) and (@id = '' or @id = id)
不过这样还不如你自己有一个拼接器能够动态拼接Top
9 楼icenl(成冈【我不要分,不要给我】)回复于 2004-12-08 19:44:12 得分 0
不如将所有的条件用 and 连接起来就是了, 而不需要的字段就用如 "id IS NOT NULL" 形式的语句.Top
10 楼icenl(成冈【我不要分,不要给我】)回复于 2004-12-08 19:46:00 得分 0
哦, sandrowjw写的好像也是这个意思?Top
11 楼thenew_(好吃的尽管吃,好玩的尽管玩)回复于 2004-12-10 14:21:33 得分 0
select * from table where (@name = '' or name = @name) and (@sex = '' or sex = @sex) and (@id = '' or @id = id)
这个能满足我的要求了。
这么说来,作拼接器就没有必要了。
谢谢各位Top




