delphi+SQL2000数据库编程,对存储过程不很熟悉,
想通过存储过程来处理然后显示某个数据集,但字符表示很长,想用个变量来先赋值然后再加进语句,
怎么写?给个例子看看如在Delphi 表示为:
str1:='if object_id(''tempdb..#TONE'') is not null drop table #TONE select ...'
+'...'; with ADOQuery2 do
begin
close();
SQL.Clear;
SQL.Text:=str1;
ExecSql;
end;
想通过存储过程来处理然后显示某个数据集,但字符表示很长,想用个变量来先赋值然后再加进语句,
怎么写?给个例子看看如在Delphi 表示为:
str1:='if object_id(''tempdb..#TONE'') is not null drop table #TONE select ...'
+'...'; with ADOQuery2 do
begin
close();
SQL.Clear;
SQL.Text:=str1;
ExecSql;
end;
form show:
procedure TfQuery.FormShow(Sender: TObject);
begin
with self.adopItem do
begin
ProcedureName := 'myproc001';
Parameters.Clear;
Parameters.CreateParameter('@fdate1',ftDateTime,pdinput,8,'1900-01-01');
Parameters.CreateParameter('@fdate2',ftDateTime,pdinput,8,'3000-01-01');
Parameters.CreateParameter('@fitem1',ftWideString,pdinput,40,'abcdefgh');
Parameters.CreateParameter('@fitem2',ftWideString,pdinput,40,'abcdefgh');
Parameters.CreateParameter('@finvcode1',ftWideString,pdinput,40,'abcdefgh');
Parameters.CreateParameter('@finvcode2',ftWideString,pdinput,40,'abcdefgh');
end;
end;query click:
procedure TfQuery.BitBtn1Click(Sender: TObject);
begin
with self.adopItem do
begin
Close;
Parameters.ParamByName('@fdate1').Value := strtodate(self.dtp1.Text);
Parameters.ParamByName('@fdate2').Value := strtodate(self.dtp2.Text);
Parameters.ParamByName('@fitem1').Value := trim(self.edtItem1.Text);
Parameters.ParamByName('@fitem2').Value := trim(self.edtItem2.Text);
Parameters.ParamByName('@finvcode1').Value := trim(self.edtNumber1.Text);
Parameters.ParamByName('@finvcode2').Value := trim(self.edtNumber2.Text);
end;
end;
我主要是请教在SQL2000下如何创建
Create proc SeachSP
@table nvarchar(400),
@selectStr nvarchar(4000),
@whereStr nvarchar(4000)
as
declare @Str varchar(8000)
set @str=@selectStr+' ' + @table+ ' '+@whereStr
exec(@str)exec SeachSP 'csms_imei_time','select * from','where CreateDATE>=''2009-06-30'''------------------结果------------
36099 352022030571069 NULL 2010-10-16 21:03:00 2009-07-06 10:25:00 1 0 2009-04-17 21:03:00 1
3575 352022030571077 NULL 2010-02-16 18:04:00 2009-07-06 10:25:00 1 0 2009-02-17 18:04:00 NULL
31193 352022034348076 NULL 2010-04-12 15:31:00 2009-07-06 10:25:00 1 0 2009-04-13 15:31:00 NULL
32679 352965035256682 NULL 2010-04-13 20:59:00 2009-07-06 10:25:00 1 0 2009-04-14 20:59:00 NULL
34282 353798020185866 NULL 2010-04-15 10:41:00 2009-07-06 10:25:00 1 0 2009-04-16 10:41:00 NULL
36306 353798020185940 NULL 2010-04-16 23:24:00 2009-07-06 10:25:00 1 0 2009-04-17 23:24:00 NULL
34898 353798020187896 NULL 2010-04-15 20:41:00 2009-07-06 10:25:00 1 0 2009-04-16 20:41:00 NULL
35179 353798020188027 NULL 2010-04-16 00:12:00 2009-07-06 10:25:00 1 0 2009-04-17 00:12:00 NULL
32793 353798020192144 NULL 2010-04-13 22:33:00 2009-07-06 10:25:00 1 0 2009-04-14 22:33:00 NULL
36332 353798020194322 NULL 2010-04-16 23:42:00 2009-07-06 10:25:00 1 0 2009-04-17 23:42:00 NULL
35065 353798020195774 NULL 2010-10-15 00:00:00 2009-07-06 10:25:00 1 0 2009-07-13 00:00:00 1
23260 354011001138001 NULL 2010-08-17 00:00:00 2009-07-06 10:25:00 1 0 2009-07-10 00:00:00 1
23261 354011001138002 NULL 2010-02-25 00:00:00 2009-07-06 10:25:00 1 0 2009-07-12 00:00:00 NULL
36618 354011001347005 2009-01-31 00:00:00 2010-05-03 00:00:00 2009-07-06 13:47:00 0 1 NULL NULL
36656 354011001506003 2009-03-28 00:00:00 2010-07-01 00:00:00 2009-07-15 15:07:00 1 1 2009-07-02 00:00:00 NULL
36678 354011001873669 NULL 2011-01-13 00:00:00 2009-07-17 13:23:00 1 0 2009-07-14 00:00:00 1
差不多是你这样吧,但你举的例子下面这句有些不明白
'csms_imei_time'指什么意思?
'select * from','where CreateDATE>=''2009-06-30'''这些都不是完整的语句啊
exec SeachSP 'csms_imei_time','select * from','where CreateDATE>=''2009-06-30'''
@table nvarchar(400), --实际上这里是用来传表名的,就是你数据表的名字 select * from tb1 where 1=1
@selectStr nvarchar(4000), --这个是查询语句 就是 select -- from 这一段,中间的--表示你要查的字段 select * from tb1 where 1=1
@whereStr nvarchar(4000) --这个实际是 select * from tb1 where 1=1(标记红色的这一段的SQL代码)
as
declare @Str varchar(8000)
set @str=@selectStr+' ' + @table+ ' '+@whereStr
exec(@str)
Create proc SeachSP这是一个存储过程的命名@table nvarchar(400), 实际上这里是用来传表名的,
就是你数据表的名字 select * from tb1 where 1=1@selectStr nvarchar(4000),这个是查询语句 就是 select -- from 这一段,
中间的--表示你要查的字段 select * from tb1 where 1=1@whereStr nvarchar(4000) 这个实际是 select * from tb1 where 1=1
(标记红色的这一段的SQL代码)as
declare @Str varchar(8000) --这里自定一个接受所有字符串的参数
set @str=@selectStr+' ' + @table+ ' '+@whereStr这里其实就是将 前3个所说的参数拼起来,做一个查询语句
例如:@str='select * from' +' ' + 'tb1'+ ' '+'where 1=1'exec(@str)将拼起来的SQL语句执行!
SQL codeCreateproc SeachSP--这是一个存储过程的命名@tablenvarchar(400),--实际上这里是用来传表名的,就是你数据表的名字 select * from tb1 where 1=1@selectStrnvarchar(4000),--这个是查询语句 就是 select -- from 这一段,中间的--表示你要查的字段 select * from tb1 where 1=1@whereStrnvarchar(4000)--这个实际是 select * from tb1 where 1=1(标记红色的这一段的SQL代码)asdeclare@Strvarchar(8000)set@str=@selectStr+''+@table+''+@whereStrexec(@str)
[/Quote]可能我说的不够明白,是这样的,我的过程很简单,只是说我的语句很长,要在过程里用一个变量表示
简单点举例吧,我的本意是要在SQL2000里建立一个存储过程,然后在Delphi直接调用,比如不考虑语句如何复杂的情况下过程应该是这样建立CREATE PROCEDURE TELEPRO AS
select *
from ta1
GO现在关键是我的语句不是 select * from ta1 那么简单
我要用一个字符串表示,如str='select * from ta1'那么如何在SQL2000建立一个带变量的过程,至于字符串的赋值我是在delphi里面事先赋值,
等到程序运行时,我再把这个变量赋值给存储过程的变量,就这样简单
理解了么?3个参数合起来就是等于你的 如str='select * from ta1' 这个意思
理解?只不过我把你原本需要传一个参数的分开了。
第1个是个表名称,就是你需要查的那个表名第2个是传 select * from 这一段的,这一快你可以写:
select id,……………… from
第3个是传where 1=1 查询条件的这一段。
如果你没有查询条件,可以赋个空的变量过去。