如何在另一个存储过程中的一个存储过程中使用SELECT的结果?

时间:2012-09-13 08:18:51

标签: sql sql-server database

我有一个计算多个值的存储过程,SELECT是它们:

CREATE PROCEDURE [dbo].[MyProc]
AS
   DECLARE @value1 int;
   DECLARE @value2 int;
   SET @value1 =...
   IF( @value1 IS NULL ) 
       RETURN 0;
   SET @value2 =...
   SELECT @value1 AS Value1, @value2 AS Value2;
RETURN 0;

我知道我可以把它变成一个表函数但是我不想这样做,因为中间有RETURN - 有时候什么都没有回来。

我想从另一个存储过程调用该存储过程,并在另一个过程中使用SELECT检索的值。我该怎么做?

2 个答案:

答案 0 :(得分:3)

您可以创建一个temptable并在其中插入两个值。

CREATE TABLE #Temp (value1 int, value2 int)

INSERT INTO #Temp (value1, value2)
EXEC [dbo].[MyProc]

如果Value1为NULL,则#Temp中没有记录,在这种情况下,您不需要返回0.

但是如果它不是你的目标,并且你需要返回0,那么你应该使用@ value1和@ value2作为输出参数。

答案 1 :(得分:2)

您可以添加输出参数:

CREATE PROCEDURE [dbo].[MyProc]
(
  @value1 int = null output,
  @value2 int = null output
)
AS

   SET @value1 =...
   IF( @value1 IS NULL ) 
       RETURN 0;
   SET @value2 =...
   SELECT @value1 = Value1, 
          @value2 = Value2;
RETURN 0;

并使用它:

declare @v1 int, 
        @v2 int

exec MyProc @v1 out, @v2 out

select @v1, @v2

或者如果您需要更多值,可以使用临时表

create table #tmp
(
  val1 int null,
  val2 int null 
)

CREATE PROCEDURE [dbo].[MyProc]   
AS

   SET @value1 =...
   IF( @value1 IS NULL ) 
       RETURN 0;
   SET @value2 =...

   insert into #tmp
   SELECT Value1, Value2
   from tab

RETURN 0;

并使用它:

create table #tmp
(
  val1 int null,
  val2 int null 
)

exec MyProc 

select *
from #tmp

drop table #tmp