将数据从存储过程插入临时表
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 明确删除:
在存储过程完成后,会自动删除在存储过程中创建的本地临时表。表可以 由存储的任何嵌套存储过程引用 创建表的过程。该表不能被引用 调用创建表的存储过程的进程
【讨论】:
以上是关于将数据从存储过程插入临时表的主要内容,如果未能解决你的问题,请参考以下文章