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

时间:2015-05-21 07:54:50

标签: sql sql-server temp-tables

在存储过程内部,您有代码

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
insert into #datatable
exec ('select *
from datatable
where id = 1') 

删除临时表后,是否可以在表示层中显示数据?

谢谢!

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

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

选择.becoz 之后只需删除表格就没有用来删除表格而没有显示SP中使用的临时表格的输出

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

答案 2 :(得分:0)

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

DROP TABLE #datatable

之后排队
select * from #datatable

行,你会没事的。即使您的临时表只有当前用户会话的生命周期,也可以自行清理它。

另外,在你的一条评论中,你说"我想删除数据temp,因为这个SP将被多次使用。"其他用户无法访问本地临时表,并且他们的数据不会在用户会话之间保留,因此对此存储过程的其他调用不会访问第一次调用中创建的临时表中的信息。

初步答复:

我不明白你为什么要在这里使用临时桌子?除非你正在进行其他处理,而不是你的小提琴等,那么为什么你只能使用一个简单的选择呢?对于这种情况,不需要使用临时表或EXEC选择它。显然你可能只是简化了你的问题,在这种情况下只是忽略了这个答案,但如果没有,那么你的SP就是

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

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

END