从存储过程中设置变量来自另一个存储过程的结果

时间:2013-05-03 20:51:38

标签: sql

我如何按以下方式做点什么?

DECLARE @Var1 VARCHAR(200)
DECLARE @Var2 VARCHAR(200)

SET @Var1 = value1 from sp_someotherprocedure(@id)
SET @Var2 = value1 from sp_someotherprocedure(@id)

5 个答案:

答案 0 :(得分:1)

我已经创建了一个简单的示例,如何从存储过程的结果。 要将变量设置为您需要使用的存储过程的返回值 带存储过程的OUTPUT参数,它将返回值。

CREATE PROCEDURE YourStoredProcedure 
(

    @i    int,
    @result int OUTPUT
)
AS
BEGIN
SET @i = 1
Set @result = @i + 10
return @result
END

- 设置输出参数的代码

DECLARE @outputparameter AS int
exec @outputparameter =  YourStoredProcedure 10, @outputparameter output
print @outputparameter

答案 1 :(得分:0)

以下是来自另一个SO的示例,回答如何获取返回值或输出参数:

How to assign an exec result to a sql variable?

答案 2 :(得分:0)

像这样:

EXEC @Var1 = sp_someotherprocedure(@id)

答案 3 :(得分:0)

存储过程可能会返回许多结果集。因此,它并不意味着与SELECT一起使用 它们可用于OUTPUT parameters 的情况 您应该从中查看Functions然后SELECT

CREATE FUNCTION SalesByStore (@storeid varchar(30))
RETURNS TABLE AS
RETURN (SELECT t.title, s.qty
    FROM   sales s
    JOIN   titles t ON t.title_id = s.title_id
    WHERE  s.stor_id = @storeid)

然后你称之为:

SELECT * FROM SalesByStore('6380')

答案 4 :(得分:0)

在这个聚会上我来晚了,但是我自己碰到了这个问题。我和我的团队想出的解决方案是将sproc的结果执行到临时表中,然后将top 1(或任何符合您的条件的)选择为局部变量。因此,使用OP的示例可能看起来像这样:

DECLARE @Var1 VARCHAR(200)
DECLARE @Var2 VARCHAR(200)
DECLARE @sprocResult TABLE(val1 INT, val2 INT)

INSERT INTO @sprocResult (val1, val2)
EXEC sp_someotherprocedure @id

SELECT TOP 1 
    @Var1 = val1,
    @Var2 = val2
FROM @sprocResult