无法设置OUTPUT以从另一个存储过程返回一个表

时间:2012-10-01 16:01:39

标签: sql sql-server

我正在尝试创建一个存储过程,它将临时表返回给另一个存储过程。但是,我似乎无法将表设置为输出变量。例如:

   @t table(ID int) output

作为参数不起作用。但是以下不抱怨:

   @t int output

有没有办法让一个存储过程获取另一个存储过程生成的表?提前谢谢!

2 个答案:

答案 0 :(得分:0)

答案是否。

您可以将创建的表的名称从一个Stored Procedure传递到另一个SP,然后在第二个{{1}}中,您可以使用该名称通过表进行查询。

答案 1 :(得分:0)

是的,您可以使用用户定义的表格类型来实现此目的。您需要做的就是

  1. 创建用户定义的表类型。
  2. 创建第一个存储过程以接受表类型变量。
  3. 在第二个过程中声明一个Table Type变量,用你想要的数据填充它,并通过传入Table Type变量来调用第一个过程。
  4. 以下是示例代码。

    1)创建用户定义的表类型。在可编程性下 - >类型 - >用户定义的表类型 - >右键单击以创建表类型

    CREATE TYPE [schemaname].[Ttype] AS TABLE 
    (
        EmployeeID int,
        EmployeeName varchar(100),
    )
    GO
    

    以上类型只是一个示例,放在您需要的列中。这里Ttype是TableType的名称(您可以根据自己的方便命名)

    2)创建第一个存储过程,它将接受Table类型作为变量,以便您可以使用它。

    CREATE PROCEDURE [schemaname].[StoredProcName]
    @TableType Ttype READONLY
    AS
    BEGIN
         -- Just an example on how to use the TableType.
    
        INSERT INTO TableName(EmployeeId,EmployeeName)
        SELECT EmployeeID,EmployeeName FROM @TableType
    
    END
    GO
    

    上述存储过程接受表类型变量。 Ttype表示@Tabletype变量是用户定义的表类型。 READONLY表示不能对Table类型参数执行DML操作。

    3)现在,创建第二个过程,将表类型参数传递给上面创建的过程。

    CREATE PROCEDURE [schemaname].[StoredProc2Name]
    
    AS
    BEGIN
    
        SET NOCOUNT ON;
    
        DECLARE @Table as Ttype 
    
        INSERT INTO @Table(EmployeeID,EmployeeName)
        SELECT EmployeeID,EmployeeName FROM schemaname.Employees
    
        EXEC [schemaname].[StoredProcName] @Table
    
    
    END
    GO
    

    在上面的SP中,您声明了一个名为@Table的变量,它是表类型(Ttype)。现在用你需要的数据填充它,然后通过传入@Table变量调用第一个过程。