【问题标题】:How do I use result of SELECT in one stored procedure in another srored procedure?如何在另一个存储过程中的一个存储过程中使用 SELECT 的结果?
【发布时间】:2012-09-13 08:18:51
【问题描述】:

我有一个存储过程,它计算多个值并 SELECTs 它们:

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 检索到的值。我该怎么做?

【问题讨论】:

标签: sql sql-server database


【解决方案1】:

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

CREATE TABLE #Temp (value1 int, value2 int)

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

如果 Value1 为 NULL,#Temp 中将没有记录,此时不需要返回 0。

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

【讨论】:

  • 我可以控制SELECT中的哪一列进入表格的哪一列吗?
  • 可以,但前提是列数和类型匹配。像 INSERT INTO #Temp(value1, value2) 和 INSERT INTO #Temp(value2, value1) 也是可能的。但是你不能在你的 EXEC ... 语句上写一个选择。存储过程的返回顺序在此处定义。
  • 这个答案很有用,我只是补充一点,可以使用表变量代替临时表。
【解决方案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

【讨论】:

  • 建议将 myproc 末尾的 return 0 更改为 1。然后您可以(在调用存储的 proc 中)DECLARE @Exists bit; exec @Exists = MyProc; If @Exists... Else... 只允许签入,如果值 1 为空而不使用计数温度和东西
  • 当然可以,但我想展示如何获取值,仅此而已。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-13
  • 2017-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-14
相关资源
最近更新 更多