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
呵呵,存储过程确实是错误的。应该是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分别调用。谢谢
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;
@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分别调用。谢谢
计算出表的count,赋给变量 @sl
返回 @sl
用 Delphi 取得 @sl 的值
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;
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;