CREATE    PROCEDURE   qqqqq
  @tablename   varchar(200),        --表名     
  @sl int  output
  as   
begin
        declare   @sql   varchar(1000)   
       set @sql='select '+@sl+'=count(1)  from '+@tablename
       exec(@sql)
      return    
      
end
GO这样的存储过程如何调用?或者如何更改

解决方案 »

  1.   

    给你一个例子供你参考:var
      Cmd: TADOCommand;
      iReValue: Integer;
    begin
      Cmd := TADOCommand.Create(nil);
      try
        try
          Cmd.Connection := AdoCon;
          Cmd.CommandText := 'qqqqq';
          Cmd.CommandType := cmdStoredProc;
          Cmd.Parameters.CreateParameter('@sl', ftInteger, pdReturnValue, 4, -1);
          Cmd.Parameters.CreateParameter('@tablename', ftString, pdInput, 200,   tablename);
          Cmd.Execute;
          iReValue := Cmd.Parameters.Items[0].Value;
        except    end;
      finally
        Cmd.Free;
      end;
    end;
      

  2.   

    呵呵,存储过程确实是错误的。应该是CREATE    PROCEDURE   qqq
      @tablename   varchar(200),        --表名     
      @sl int  output
      as   
    begin
        declare @SQL nvarchar(300)
        set @SQL=N'select @sl=count(1) from '+@tablename
          exec sp_executesql @SQL,N'@sl int out',@sl out
    end
    GO
    但是如何调用呀?用ADOStoredProc和ADOQUERY分别调用。谢谢
      

  3.   

    搞的有点复杂了吧你的需求是不是传入一个表名
    计算出表的count,赋给变量 @sl
    返回 @sl
    用 Delphi 取得 @sl 的值
      

  4.   

    用 ADOStoredProc:
    procedure TForm1.Button1Click(Sender: TObject);
    var
      sl : Integer;
    begin
      sl := 0;
      if ADOStoredProc1.Active then
        ADOStoredProc1.Active := False;
      ADOStoredProc1.Parameters.Refresh;
      ADOStoredProc1.Parameters.ParamByName('@tablename').Value := 'xsdb';
      ADOStoredProc1.Parameters.ParamByName('@sl').Value := sl;
      ADOStoredProc1.ExecProc;
      Edit1.Text := ADOStoredProc1.Parameters.ParamByName('@sl').Value;
    end;
      

  5.   

    AdoQuery 的,不知道还有没有更好的方法,xsdb 是表名,你可以替换成变量,其他不用动procedure TForm1.Button2Click(Sender: TObject);
    var
      sSQL: string;
    begin
      sSQL := 'declare @mysl int ';
      sSQL := sSQL + 'exec qqq ''xsdb'', @mysl output ';
      sSQL := sSQL + 'select @mysl as sl';
      AdoQuery1.Close;
      AdoQuery1.SQL.Text := sSQL;
      AdoQuery1.Open;
      Edit2.Text := AdoQuery1.FieldByName('sl').AsString;
    end;
      

  6.   

    谢谢zhangjing1979666您的解答,可以圆满解决我的需要。其实我的存储过程是插入一部分数据后,直接显示总数据量。