有关sql临时表的问题。

ruhong 2014-05-18 06:53:22
在一个存储过程中,我建立了一个临时表,
在存储过程的最后,我删除了这个临时表。
我的问题是,当很多用户调用这个存储过程的时候,
我如果避免这个临时表的存在而出错?
而且我也不能轻易删除他,因为这意味着,某个用户的运算还没有结束。
...全文
276 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
snn318 2014-05-20
  • 打赏
  • 举报
回复
临时表和当前用户会话状态有关,每个用户调用都会有自己的会话状态,会话结束则自己的临时表,不会影响其他人。这也是和全局变量的区别。祝你好运
  • 打赏
  • 举报
回复
使用#表名 创建调用时没问题的。
唐诗三百首 2014-05-19
  • 打赏
  • 举报
回复
如果用的不是全局的临时表(即##[表名]的),没问题的. 多用户调用这个存储过程时,会在不同进程里建自己的临时表,其互不干扰.
發糞塗牆 2014-05-19
  • 打赏
  • 举报
回复
#这种是会话级别的,用完就会消失,除非你的会话还处于活动,不建议手动删除临时表。说的太深你也不懂,跟页分配有关,总的来说,保证程序的逻辑正确,就不用删除#这种临时表。
發糞塗牆 2014-05-19
  • 打赏
  • 举报
回复
引用 6 楼 rockyljt 的回复:
[quote=引用 3 楼 DBA_Huangzj 的回复:] #这种是会话级别的,用完就会消失,除非你的会话还处于活动,不建议手动删除临时表。说的太深你也不懂,跟页分配有关,总的来说,保证程序的逻辑正确,就不用删除#这种临时表。
不用删除#临时表,创建前先判断是否存在,若存在先drop掉再创建

IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'#A') AND type in (N'U'))
DROP TABLE #A

[/quote]这种通常在调试阶段才需要,一般调用SP的时候不需要,但是创建前判断也不是不可以
---涛声依旧--- 2014-05-19
  • 打赏
  • 举报
回复
引用 3 楼 DBA_Huangzj 的回复:
#这种是会话级别的,用完就会消失,除非你的会话还处于活动,不建议手动删除临时表。说的太深你也不懂,跟页分配有关,总的来说,保证程序的逻辑正确,就不用删除#这种临时表。
不用删除#临时表,创建前先判断是否存在,若存在先drop掉再创建

IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'#A') AND type in (N'U'))
DROP TABLE #A

ruhong 2014-05-18
  • 打赏
  • 举报
回复
引用 1 楼 sunjoin2009 的回复:
在过程中加上 临时表的存在性测试, 已经存在不再创建。
关键他如果已经存在,我也不用能他啊,因为这意味着另一用户的运算还没有完成。
sunjoin2009 2014-05-18
  • 打赏
  • 举报
回复
在过程中加上 临时表的存在性测试, 已经存在不再创建。

34,875

社区成员

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

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