在存储过程中怎么删除一个临时表?

编程烂指 2002-03-20 11:16:07
加精
在存储过程中怎么删除一个临时表?
这个临时表是在这个存储过程中产生的,
我用drop table #temp1,没有出错信息,
但是再用到 #temp1时提示 #temp1已存在!
...全文
251 23 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
leimin 2002-03-22
  • 打赏
  • 举报
回复
给个example to you:自己研究吧
CREATE proc test
@int_max varchar output
as
DECLARE @sql varchar(300)
set @sql='select max(no) into'+@int_max+' from test' --传递一个变量
exec(@sql)
set @sql=@int_max
print(@sql)

GO
x_zing 2002-03-22
  • 打赏
  • 举报
回复
可以,解决办法之一是,将你的Sql语句当成字符串,然后用EXEC执行。

USE PUBS
DECLARE @COL AS VARCHAR(20)
SET @COL='JOB_ID'
EXEC('SELECT '+@COL+' FROM JOBS')
编程烂指 2002-03-22
  • 打赏
  • 举报
回复
再加20分
编程烂指 2002-03-22
  • 打赏
  • 举报
回复
再问个问题,在存储过程中,字段名中能不能有变量,如Field@i之类的?
如果能要怎么写??
x_zing 2002-03-22
  • 打赏
  • 举报
回复
是啊,把你的代码贴出来!
i_need_mana 2002-03-22
  • 打赏
  • 举报
回复
一定要删除,这是编程的好习惯,drop table #aaa
leimin 2002-03-22
  • 打赏
  • 举报
回复
将代码贴出来,让大家看看。我估计你的代码有问题。或你的SQL安装有问题。
x_zing 2002-03-21
  • 打赏
  • 举报
回复
同意N_chow(一劍飄香++)的观点!!
编程烂指 2002-03-21
  • 打赏
  • 举报
回复
好像没用呀,DROP了以后还是有提示,除不掉!
这和D版有关吗?
N_chow 2002-03-21
  • 打赏
  • 举报
回复
在Create temp table 之前判斷這個temp table是否存在,如果存在則先干掉它。

IF OBJECT_ID(N'tempdb..#tmp') IS NOT NULL
DROP TABLE #tmp

難道這樣不行嗎?


ntsnow 2002-03-21
  • 打赏
  • 举报
回复
net_steven说的方法还可以.
如果一定要用DROP TABLE的话,像还要执行一个类似TIMEPORINT的东东,让这个DROP TABLE有效.
CSDNM 2002-03-21
  • 打赏
  • 举报
回复
呵呵,可能你的是D版!!
CSDNM 2002-03-21
  • 打赏
  • 举报
回复
可以呀,看测试结果:

create procedure test
as
declare @i int
select @i=2
while @i>0
begin
select @i as i into #Temp
select * from #Temp
drop table #Temp
select @i=@i-1
end
go

This command did not return data, and it did not return any rows

exec test

i
-----------
2

(1 row(s) affected)

i
-----------
1
net_steven 2002-03-21
  • 打赏
  • 举报
回复
如果表结构不变,不必drop table,可以truncate table 再
insert #temp1 select ...
如果表结构各异,就用动态的表名生成临时表.
这方面sql server有缺陷,无奈.
tonkeycn 2002-03-21
  • 打赏
  • 举报
回复
关注
yannankai 2002-03-21
  • 打赏
  • 举报
回复
rwq_你说的方法我试过不行呀,
如果你再写一句select * into #yourtable from table
系统提示错误
There is already an object named '#yourtable' in the database.

另外我在编写过程中对用过的临时表都删除,这样做有必要吗,或者这样做有助于提高过程的执行速度吗
rwq_ 2002-03-20
  • 打赏
  • 举报
回复
要删除的话用:drop table tmepdb.#yourtable
N_chow 2002-03-20
  • 打赏
  • 举报
回复
那就這樣好了。

IF OBJECT_ID(N'tempdb..#tmp') IS NOT NULL
DROP TABLE #tmp
yannankai 2002-03-20
  • 打赏
  • 举报
回复
不用删除,系统退出时将自动删除。
如果你想再用一个临时表,起别一个名字就可以了吗
如果你把影响你的某种速度,我回答不了你,不过你可以少用临时表,多用子查询
rwq_ 2002-03-20
  • 打赏
  • 举报
回复
临时表不用你去删除,系统会自动删除的(对于局部临时表,会话退出时删除)
加载更多回复(3)

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧