我有一个存储过程 SP1,它在一个表上执行并进行选择。现在我需要将该数据插入到另一个表中。我不想重复代码,所以我想将 SP1 返回的数据插入到临时表中,这样我就可以对其进行一些处理并保存它。
我尝试了
INSERT INTO #tmp; exec dbo.Sp1;
,但它给了我一个错误,说Invalid object name '#tmp'.
。有没有办法可以动态创建这个表?这个问题有更好的解决办法吗?
在使用 insert into exec 之前,临时表必须存在。
这并不是一个缺点,因为它乍一看似乎是对过程结果集的任何更改都可能会破坏您的代码。
首先运行这个:
create proc MySelect
as
begin
select 1 as myColumn1, 2 as mycolumn2
end
然后是这个:
create table #tmp(
col_1 int,
col_2 int)
insert into #tmp exec MySelect
select * from #tmp
如果您可以控制 dbo.sp1,那么最简单的方法是使用临时表。在父过程中声明临时表并在子过程中使用它(不声明它)。
该表将通过两者维持范围,并且您不必担心多个用户运行它,因为临时表是本地的。