临时表作为存储过程中的输出参数

Posted

技术标签:

【中文标题】临时表作为存储过程中的输出参数【英文标题】:Temp Table as Output Parameter in Stored Procedure 【发布时间】:2014-09-18 07:23:54 【问题描述】:

我想知道是否有可能以及如何在存储过程中使用临时表作为输出参数。我知道普通表不能用 UPDATE 修改,并且只是 READONLY 表,所以我想到了使用临时表。但我不明白如何将它们传递给存储过程以及如何将它们作为输出:

CREATE TABLE #tableBER (ID INT NOT NULL IDENTITY PRIMARY KEY, VAL INT NOT NULL DEFAULT 0);
CREATE TABLE #tableRL (ID INT NOT NULL IDENTITY PRIMARY KEY, VAL INT NOT NULL DEFAULT 0);

ALTER PROCEDURE [dbo].[getFound] 
   @ber #tableBER OUTPUT,
   @rl #tableRL OUTPUT,
AS
BEGIN
  ...
  UPDATE @ber ... --UPDATE
  UPDATE @rl  ...

  SELECT @ber; -- RETURN THE TWO TABLES
  SELECT @rl;
END;

这样可以吗?谢谢!

【问题讨论】:

【参考方案1】:

存储过程可以引用和使用在外部范围内创建的临时表。无需将它们标记为参数,只需创建表,调用存储过程,然后检查内容即可:

create procedure DoStuff
as
    insert into #TTT (ID) values (1),(2),(3)

及用法:

create table #TTT(ID int not null)
exec DoStuff
select * from #TTT

结果:

ID
-----------
1
2
3

【讨论】:

以上是关于临时表作为存储过程中的输出参数的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server存储过程中使用表值作为输入参数示例

如何从临时表名中选择,传递给存储过程?

如何将临时表作为参数传递到单独的存储过程中

T-SQL 中具有表参数的存储过程

sqlserver 2008 关于存储过程中的临时表。

在MySQL中如何创建一个带输出参数为一个表类型的存储过程