我自己写了一个存储过程,有两个变量,一个是起始时间@Start datetime,一个是截止时间@Finish datetime,返回一个数据集.
我想写一个程序,从这个返回的数据集里获取数据,但是程序里需要灵活设置查询条件对该数据集取值. 相当于SQL语句里再嵌套一个存储过程.
在网上搜了很久也没有找到处理的方法,请大家帮帮忙!
我想写一个程序,从这个返回的数据集里获取数据,但是程序里需要灵活设置查询条件对该数据集取值. 相当于SQL语句里再嵌套一个存储过程.
在网上搜了很久也没有找到处理的方法,请大家帮帮忙!
解决方案 »
- if else语句
- 国庆回家陪老爸老妈的来报个名
- DELPHI6 打包程序???、
- 如何在delphi里面调用api函数
- ★^@^★: 在dbExpress组件中的TSQLDataset中Active=True为什么报错?
- 看到一个别人写的程序,用DELPHI打开程序后弹出一对话框,提示如下:Set Root Directory,请问这是一个什么问题,如何在程序中设置,及其
- 请问怎样连接MySql数据库???
- TImage中的图片移动?
- 怎么控制memo内文字的颜色?
- delphi中如何调用oracle中的存储过程和DBMS包?
- excelapplication1.Workbooks.Open
- 求一思路,取js中的表单
declare @SQL varchar(1024)if @A <> ''
select @SQL = ' select * from Table where A = '+ @Aexecute (@SQL);大概就是这个意思。
var
v1,v2,v3,ASqlStr:string;//为你的查询条件的变量
AStartTime,AEndTime :string;
begin
ASqlStr :='select * from Table where Start='''+AStartTime+''' and Finish ='''+AEndTime+''';
//给v1,v2等赋值
//判断变量是否为空
if V1<>'' then ASqlStr =ASqlStr +'and 表中字段='''+V1+'''';//格式如Finish ='''+AEndTime+'''
//然后一直判断下去
with adoquery1 do
begin
close;
sql.clear;
sql.add(asqlstr);
open;
end ;
end;
在主函数中,定义一个输出函数.就能嵌套输出了.
我SQL语句的where部分像下面这个样子:
WHERE (LA001 LIKE '2%') AND (LTRIM(RTRIM(LA001))+LTRIM(RTRIM(LA016)) NOT IN (SELECT DISTINCT LTRIM(RTRIM(LA001))+LTRIM
(RTRIM(LA016)) FROM YCSINVMX WHERE (LA001 LIKE '2%') AND (LA005='-1'))) AND
(LA009 IN('C991','0014')) AND (LA001 <> '') AND (LA016 = '20090212')这段条件句中前两行是固定不变的,第3行条件是变化的,可能只有两个,也可能一个都没能,而且条件中的IN,<>,=也是变化的,就是不知道将这部分传递到存储过程里面去,试过很多次都不成功!
我起初也是这样做的,但觉得不够优化,如果不加条件存储过程的结果集INSERT到那个表大约上百万的数据量,非常耗时,如果加上条件则小得多了,或者只有几万了
在程序里做的话只能分2步来做!!