我的存储过程采用一个输出参数并返回记录集。
CREATE PROCEDURE MyProc
@EntityCode BIGINT, @ResValue INT OUTPUT
AS
BEGIN
SELECT .... WHERE Code=@EntityCode
SET @ResValue = ...
END
我需要同时接收输出参数和记录集的值。所以我这样做:
function GetData(const EntityCode: Int64): Integer;
var
Proc: TADOStoredProc;
PEntityCode: ADODB.TParameter;
PResValue: ADODB.TParameter;
begin
Proc := TADOStoredProc.Create(nil);
try
Proc.Connection := ADOConnection1;
Proc.CursorLocation := clUseServer;
Proc.ProcedureName := 'MyProc';
PEntityCode := Proc.Parameters.AddParameter;
PEntityCode.Name := '@EntityCode';
PEntityCode.DataType := ftLargeint;
PEntityCode.Value := EntityCode;
PResValue := Proc.Parameters.AddParameter;
PResValue.Name := '@ResValue';
PResValue.DataType := ftInteger;
PResValue.Direction := pdOutput;
//Proc.Prepared := True;
Proc.Open;
Result := PResValue.Value;
while not Proc.Eof do
begin
Proc.Next;
end;
finally
Proc.Free;
end;
end;
Recordset 不为空,但 PResValue.Value 为 0。如果我调用 Proc.ExecProc,则记录集为空,但 PResValue.Value 已分配。是否可以同时接收记录集和输出参数的值?
我发现如果 MyProc 的记录集仅包含一条记录,则分配 OUTPUT 参数的值。这是什么意思?
谢谢!