【问题标题】:TSQL: Call a stored procedure from another stored procedure and read the resultTSQL:从另一个存储过程调用一个存储过程并读取结果
【发布时间】:2011-03-03 14:58:48
【问题描述】:

我有一个以 SELECT 结尾的存储过程,它返回一个记录集。我可以像这样在另一个存储过程中调用它:

EXEC procedure @param

如何获取返回的记录集?谢谢

【问题讨论】:

标签: sql tsql stored-procedures


【解决方案1】:

AFAIK,你不能。您可能想要做的是为您的第一个(或两个)过程使用一个函数。函数只能返回一个东西,但它们可以返回一个表。存储过程可以返回多个结果,但不能返回其他函数/存储过程。

例如:

CREATE FUNCTION [dbo].[fn_GetSubordinates] (
    @sPersonID VARCHAR(10),
    @nLevels INT
)
RETURNS @tblSubordinates TABLE
(
    Person_Id VARCHAR(10),
    Surname char(25),
    Firstname char(25)
)
AS
BEGIN
    ...

【讨论】:

    【解决方案2】:

    您可以创建一个临时表,然后使用INSERT INTO #MyTable EXEC procedure @param

    还有一些其他的techniques listed here

    【讨论】:

      【解决方案3】:

      如果您使用的是 SQL Server 2008,我建议您返回一个表值参数。

      http://msdn.microsoft.com/en-us/library/bb510489.aspx

      【讨论】:

      • 我认为 TVP 代表了一个仅输入的构造...OP 似乎想要返回 proc 的输出?
      【解决方案4】:

      您可以使用存储过程中的输出变量来执行此操作。例如:

      CREATE PROCEDURE sp_HelloWorld   @MyReturnValue int OUT
      AS
      SELECT @MyReturnValue = 100
      Return @MyReturnValue 
      

      要调用此存储过程,请执行以下操作:

      DECLARE @TestReturnVal int 
      
      EXEC sp_HelloWorld @TestReturnVal output
      SELECT @TestReturnVal 
      

      【讨论】:

        【解决方案5】:

        首先,您不能通过存储过程返回记录集。通过返回,存储过程只能返回整数。

        您提到了SELECT 语句,这是一个 DQL,仅用于显示目的。

        解决此问题的方法是将记录集分配给全局临时表,该表也可以在外部存储过程中访问。

        【讨论】:

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