【问题标题】: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 轻松完成此操作。但是想知道我是否只能通过使用存储过程来完成它。

【问题讨论】:

标签: sql-server-2008 stored-procedures


【解决方案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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-11-14
          • 1970-01-01
          • 2014-09-17
          • 2011-05-08
          • 2011-05-05
          • 1970-01-01
          相关资源
          最近更新 更多