【问题标题】:How to get sql server stored procedure result to process in an other stored procedure?如何获取 sql server 存储过程结果以在其他存储过程中处理?
【发布时间】:2014-03-07 14:25:59
【问题描述】:

我面临需要在另一个存储过程中使用一个存储过程的结果的情况。我的第一个存储过程返回一个表的子集,我想在第二个存储过程中使用它。

exec dbo.myprcedure param 返回结果,但我需要在另一个存储过程中捕获它。

任何帮助将不胜感激。

【问题讨论】:

    标签: sql-server stored-procedures


    【解决方案1】:

    您可以使用视图代替存储过程。视图可以包含表中选定的数据。首先创建一个视图,然后在存储过程中调用视图

    创建一个临时表。从临时表可以得到数据的

    【讨论】:

    • 我正在使用 Entity Framework 6,但我不想使用视图,因为它们使挖掘数据变得太慢。
    【解决方案2】:

    如果它只返回一个结果集,你可以创建一个临时表然后使用语法

    INSERT INTO #tmp
    EXEC dbo.myprocedure @param
    

    https://stackoverflow.com/a/14623262/8479

    但总的来说,最好找到不同的方法,例如使用table-valued variables 或使用函数而不是proc。

    【讨论】:

    • 我无法理解您在最后一行中的更好方法。你的回答令人印象深刻。
    【解决方案3】:

    在第二个存储过程中执行第一个存储过程并在那里使用结果。像

    CREATE PROCEDURE Proc_2
    @param
    AS
    BEGIN
     SET NOCOUNT ON;
    
    /* Create a Temp Table here say #TempTable*/
    
    INSERT INTO #TempTable
    exec dbo.myporcedure @param 
    
    /* Your rest of the code that needs to work with the result set of dbo.myporcedure */
    
    END
    

    【讨论】:

      【解决方案4】:

      只需在 FUNCTIONSTORED PROCEDURE 中返回 TABLE VARIABLE,然后在调用方存储过程中使用该 TABLE VARIABLE 进行进一步处理或作为 TABLE VARIABLE 参数传递给另一个存储过程。

      即如下创建一个返回 TABLE VARIABLE 的函数。

      CREATE PROCEDURE MyProcedureThatReturnsATable()
      RETURNS  @ReturnTable TABLE 
      (
          -- specify columns returned by the proc here
          ID INT NOT NULL,
          Name nvarchar(255) NOT NULL
      )
      AS
      BEGIN
      .
      ..
      ...
      
      --This select returns data 
      INSERT INTO @ReturnTable
      SELECT ID, Name FROM SOME_TABLES
      
      RETURN
      
      END
      

      然后在父存储过程中,您将执行上述存储过程并在该父存储过程中填充一个表变量,如下所示。

      DECLARE @MyParentTableVariable as TABLE (ID INT, Name nvarchar(255))
      
      INSERT INTO @MyParentTableVariable
      EXECUTE MyProcedureThatReturnsATable
      

      因此,现在,在父存储过程中,您将来自 MyProcedureThatReturnsATable 的数据保存在 TABLE VARIABLE 中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-09-18
        • 1970-01-01
        • 1970-01-01
        • 2011-03-29
        • 2018-07-13
        • 1970-01-01
        • 2016-10-31
        相关资源
        最近更新 更多