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变量调用第一个过程。是否有替代方法?