删除临时文件后在表示层中显示数据 Table

Present Data in Presentation Layer after Removing the Temp Table

存储过程内部有代码

create table #datatable (id int,
                        name varchar(100),
                        email varchar(10),
                        phone varchar(10),
                        cellphone varchar(10),
                        none varchar(10)                        
                       );

insert into #datatable
exec ('select *
from datatable
where id = 1') 

select * from #datatable

我仍然想检索数据并将其呈现在软件的表示层中,但我仍然想删除临时文件 table 以减少性能问题等。

如果我在

之后粘贴代码 DROP TABLE #datatable
insert into #datatable
exec ('select *
from datatable
where id = 1') 

删除临时文件后,是否可以在表示层中呈现数据table?

谢谢!

http://sqlfiddle.com/#!3/14bbc/1/1

如果您在插入语句后键入 drop table,您将无法从后续的 select 中获得任何结果:您删除了 table 和 SQL 会说它不知道你要的 table 。获取数据然后删除 table

只需在 select 之后删除 table .becoz 删除 table 而不显示 SP 内部使用的临时 table 的输出是没有用的

create table #datatable (id int,
                        name varchar(100),
                        email varchar(10),
                        phone varchar(10),
                        cellphone varchar(10),
                        none varchar(10)                        
                       );

insert into #datatable
exec ('select *
from datatable
where id = 1') 

select * from #datatable

drop table #datatable

编辑:你说你有这样做的理由所以请忽略我下面的回答。回答您是否可以删除临时 table 然后是的,您可以,并且您的数据 仍由您的存储过程返回。你可以把

DROP TABLE #datatable

在你的

之后加入
select * from #datatable

行,你会没事的。最好自己清理一下,即使你的临时 table 只有当前用户会话的生命周期。

此外,在您的一条评论中,您说 "I want to remove the data temp because the this SP will be used many time." 其他用户无法访问本地临时 table,并且他们的数据不会在用户会话之间保留,因此没有其他调用此存储过程将从第一次调用中创建的临时 table 访问信息。


初始答案:

我完全不明白你为什么在这里使用临时 table?除非你正在进行 fiddle 等之外的其他处理,否则你为什么不能只使用简单的 select?对于这种情况,无需使用临时 table 或 EXEC a select 。显然你可能只是简化了你的问题在这种情况下忽略这个答案但如果不是那么你的 SP 只是

CREATE PROCEDURE [procname] 
(
  @id int
)
AS
BEGIN

SELECT id
       name,
       email,
       phone,
       cellphone,
       none
FROM datatable
WHERE id = @id

END