从存储过程中获取第一行第一列的值

Get first row, first column value from stored procedure

我正在调用一个存储过程(我无法修改),在过程结束时通过 SELECT return 是单个值。我需要在自己的程序中使用该值。我怎样才能得到那个值?

这是我无法修改的调用过程的示例:

CREATE PROCEDURE [dbo].[SP_poorlywritten] (
....
)
BEGIN
    ....
    SELECT @lastkey;
    RETURN (0);
END

这就是我想要做的,但它不起作用,因为它获得了 return 值,而我需要的是 SELECT 值:

exec @next_key = SP_poorlywritten 'tablename',1;

如何从存储过程中存储第一列、第一行的值?

如果您不能修改现有的存储过程,您将无法使用 RETURN

另一种方法可能是将过程的 select 语句的输出插入临时 table,然后直接查询以填充变量。

看起来像这样。

CREATE TABLE #tmp
(
   LastKey INT
)

INSERT INTO #tmp
EXEC [dbo].[SP_poorlywritten]

请参阅现有的 post 以了解有关如何完成此操作的更多详细信息。

正如 Aaron Bertrand 指出的那样,RETURN 用于 error/status。如果您能够修改存储过程,您会希望使用输出参数而不是 RETURN。这就是您的做法。

CREATE PROCEDURE proc_name
    @Output int OUTPUT
AS
    <do some stuff>

    SET @Output = <some_value>
GO

DECLARE @Output int

EXEC proc_name @Output = @Output