将数据从存储过程插入临时表

Posted

技术标签:

【中文标题】将数据从存储过程插入临时表【英文标题】:Insert data into a Temporary Table from a Stored Procedure 【发布时间】:2022-01-24 01:51:15 【问题描述】:

我有一个名为 Sp_Ejecucion 的存储过程,它创建了一个具有以下结构的临时表:

CREATE TABLE #CambioResult (FOL INT IDENTITY, RESULT INT)

在该命令之后运行另一个 Sp,如下所示

BEGIN TRAN T1
DECLARE @vnCambiaRollTurnoResult    INT = 0,
        @vnReacomodoMarcajesResult  INT = 0,
        @Result                     INT = 0

BEGIN TRY
    exec nsp_Exec                   @nClaEmp        = @pnClaEmpresa, 
                                    @nClaTrab       = @pnClaTrab, 
                                    
END TRY
BEGIN CATCH
    GOTO RETURN_ERROR
END CATCH

而第二个存储里面我想往第一个存储创建的表中插入数据,我该怎么做呢?我的意图如下:

INSERT INTO OBJECT_ID('tempdb..#CambioResult')
select @Error

pero marca error en esta parte OBJECT_ID

【问题讨论】:

临时表仅在创建它的范围内持续存在。如果您在过程中创建临时表,那么一旦过程完成,它将被隐式删除。如果您想在过程之间传递数据,那么一种方法是让第一个将数据作为表类型参数传递给第二个。 如果您在创建临时表的第一个过程中调用一个过程,则该表将在嵌套过程中可见 - 您只需将其插入其中 insert into #CambioResult(Result) select @error 或者你可以在两个存储过程之外创建表,那么它只会在你的外部过程或批处理完成后被删除 【参考方案1】:

当您在嵌套过程中插入时,您将能够在嵌套过程中引用父过程临时表#CambioResult

您必须更改嵌套过程中的 INSERT 语句:nsp_Exec,如下所示:

INSERT INTO #CambioResult
SELECT ....

关于临时表范围,reference msdn

临时表超出范围时会自动删除, 除非使用 DROP TABLE 明确删除:

在存储过程完成后,会自动删除在存储过程中创建的本地临时表。表可以 由存储的任何嵌套存储过程引用 创建表的过程。该表不能被引用 调用创建表的存储过程的进程

【讨论】:

以上是关于将数据从存储过程插入临时表的主要内容,如果未能解决你的问题,请参考以下文章

将存储过程数据插入临时表不起作用

从返回多个结果集的存储过程中插入临时表

将存储过程结果插入临时表

oracle存储过程中临时表的使用,该怎么处理

ORACLE存储过程创建临时表并插入数据。

存储过程 将数据插入到临时表,再根据条件判断 插入到不同的表