从存储过程中获取第一行第一列的值
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
我正在调用一个存储过程(我无法修改),在过程结束时通过 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