小弟写了一个存储过程是生成一个临时表并返回数据的
但不知道在delphi里应该如何来取得这些数据

解决方案 »

  1.   

    存储过程如下
    create proc dbo.MyTest
    @myValue char(10) = '男'
    as
     
    Select * into #job From StuInfo where stusex = @myvalue
    Select * from #job但在Delphi中用Query执行后临时表就被删除了
      

  2.   

    create procedure yourprocedurename
    as
      create table #temptable
      (value1 int,value2 int)
      insert #temptable select value1,value2 from mytable
      select * from #temptable
      

  3.   

    恩,楼上的兄台误会我的意思了,存储过程在sql的query里面是正常的,但是在delphi里执行完毕的时候就把生成的临时表删除了
      

  4.   

    那你用个ADOQUERY重新将满足条件的数据取出来不就行了啊
      

  5.   

    的鹿:query执行过程,然后得到一个结果集,没问题啊。
      

  6.   

    执行存储过程后,你的数据就取被出了。
    临时表被删除并不影响你取数据,你的数据已经在Query里了。
      

  7.   

    没错,MSSQL就是要把临时表删除的,否则你第二次执行该语句要报错了!
    但是如果返回结果集的话还是可以的。返回集作为游标打开在内存后可以当作与表没有关系啦。
      

  8.   

    procedure TForm1.FormCreate(Sender: TObject);
    begin
      self.ADOQuery1.SQL.Clear;
      self.ADOQuery1.SQL.Add('exec mytest');
      self.ADOQuery1.ExecSQL;
    end;
    这个是我做测试的一段代码
    窗体上还有一个DBGrid,它的Source就是Query1
    执行后,无任何反映,再到SQL里面察看
    临时表已经被删除
      

  9.   

    execsql只执行SQL语句不返回结果,用OPEN又不执行更新,所以你还是用3个语句:1,生成一个临时表;2,查询临时表;3,删除临时表。
      

  10.   

    procedure TForm1.FormCreate(Sender: TObject);
    begin
      self.ADOQuery1.SQL.Clear;
      self.ADOQuery1.SQL.Add('exec mytest');
      self.ADOQuery1.ExecSQL;
    end;
    改为 self.ADOQuery1.Open;即可