我正在尝试创建一个存储过程,它将临时表返回给另一个存储过程。但是,我似乎无法将表设置为输出变量。例如:
@t table(ID int) output
作为参数不起作用。但是以下不抱怨:
@t int output
有没有办法让一个存储过程获取另一个存储过程生成的表?提前谢谢!
答案 0 :(得分:0)
答案是否。
您可以将创建的表的名称从一个Stored Procedure
传递到另一个SP
,然后在第二个{{1}}中,您可以使用该名称通过表进行查询。
答案 1 :(得分:0)
是的,您可以使用用户定义的表格类型来实现此目的。您需要做的就是
以下是示例代码。
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变量调用第一个过程。