Sql 不能将输出设置为从另一个存储过程返回表

Sql 不能将输出设置为从另一个存储过程返回表,sql,sql-server,Sql,Sql Server,我试图创建一个存储过程,它将一个临时表返回给另一个存储过程。但是,我似乎无法将表设置为输出变量。例如: @t table(ID int) output 作为一个参数不起作用。但是,以下情况并未引起投诉: @t int output 有没有办法让一个存储过程获得另一个存储过程生成的表?提前谢谢 答案是否定的 您可以将创建的表的名称从一个存储过程传递到另一个存储过程,然后在第二个SP中,您可以使用该名称通过表进行查询。是的,您可以通过使用用户定义的表类型来实现这一点。你需要做的就是

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

   @t table(ID int) output
作为一个参数不起作用。但是,以下情况并未引起投诉:

   @t int output
有没有办法让一个存储过程获得另一个存储过程生成的表?提前谢谢

答案是否定的


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

是的,您可以通过使用用户定义的表类型来实现这一点。你需要做的就是

  • 创建用户定义的表类型
  • 创建第一个存储过程以接受表类型变量
  • 在第二个过程中,声明一个表类型变量,用所需的数据填充它,并通过传入表类型变量调用第一个过程
  • 下面是一个示例代码

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

    CREATE TYPE [schemaname].[Ttype] AS TABLE 
    (
        EmployeeID int,
        EmployeeName varchar(100),
    )
    GO
    
    上面的类型只是一个示例,放在您需要的列中。这里Ttype是TableType的名称(您可以根据自己的方便来命名)

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

    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 type参数执行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的变量,该变量为Table类型(Ttype)。现在,您用所需的数据填充它,然后通过传入@Table变量调用第一个过程。

    是否有替代方法?