如何在没有临时表的情况下从另一个存储过程调用存储过程(带参数)

Posted

技术标签:

【中文标题】如何在没有临时表的情况下从另一个存储过程调用存储过程(带参数)【英文标题】:How to call a stored procedure (with parameters) from another stored procedure without temp table 【发布时间】:2012-01-15 08:45:23 【问题描述】:

我有存储过程 A,想通过传递 @mydate 参数从 A 调用存储过程 B。存储过程 B 将返回一个行集,我可以在过程 A 中进一步使用它。

我在 Google 上对此进行了研究,但没有使用临时表就没有找到任何东西。有没有一种简单的方法可以在没有临时表的情况下获得它。

P.S.:我尝试使用存储过程作为 A 并使用函数作为 B 轻松完成此操作。但是想知道我是否只能通过使用存储过程来完成它。

【问题讨论】:

试试***.com/questions/209383/… - 你的确切问题已经涵盖了。 【参考方案1】:

你可以只调用 Execute 命令。

EXEC spDoSomthing @myDate

编辑

既然你想返回数据..这有点难。您可以使用用户定义的函数来代替返回数据。

【讨论】:

【参考方案2】:

您可以使用 EXECUTE 命令从另一个存储过程调用一个存储过程。

假设你的程序是 X,那么你可以在 X 中使用

EXECUTE PROCEDURE Y () RETURNING_VALUES RESULT;"

【讨论】:

如果您发布代码、XML 或数据示例,在文本编辑器中突出显示这些行,然后单击编辑器上的“代码示例”按钮 ( )工具栏以很好地格式化和语法突出显示它!【参考方案3】:

您可以在过程 A 中创建表变量而不是 tamp 表,然后执行过程 B 并通过以下查询插入临时表。

DECLARE @T TABLE
(
TABLE DEFINITION
)
.
.
.
INSERT INTO @T
EXEC B @MYDATE

然后你继续操作。

【讨论】:

【参考方案4】:
 Create PROCEDURE  Stored_Procedure_Name_2
  (
  @param1 int = 5  ,
  @param2 varchar(max),
  @param3 varchar(max)

 )
AS


DECLARE @Table TABLE
(
   /*TABLE DEFINITION*/
   id int,
   name varchar(max),
   address varchar(max)
)

INSERT INTO @Table 
EXEC Stored_Procedure_Name_1 @param1 , @param2 = 'Raju' ,@param3 =@param3

SELECT id ,name ,address  FROM @Table  

【讨论】:

【参考方案5】:

您可以在存储过程 B 中像这样调用存储过程。

CREATE PROCEDURE spA
@myDate DATETIME
AS
    EXEC spB @myDate

RETURN 0

【讨论】:

以上是关于如何在没有临时表的情况下从另一个存储过程调用存储过程(带参数)的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 从另一个存储过程调用存储过程

oracle存储过程中临时表的使用,该怎么处理

ORACLE存储过程创建临时表并插入数据。

SQL SERVER里面如何在存储过程里面获取另一个存储过程所返回的表的数据?

SQL SERVER里面如何在存储过程里面获取另一个存储过程所返回的表的数据?

SQL临时表使用