在MS SQL Server 2005中,当同一个SP的不同执行访问临时表时会发生什么?

jre*_*121 6 sql-server temp-tables table-locking

我有一个存储过程,首先检查临时表(#temp_table),如果它存在则删除它,使用该表,然后在完成时最终删除它.当用户做某事来触发它时,该SP被随机调用,并且有时SP可能会同时执行 - 或者有些重叠.

假设我的Exec1和Exec2都是相同的SP创建,更改和删除#temp表,并且它们在相隔毫秒内运行.

怎么了?在Exec1完成时,Exec1会锁定#temp_table和Exec2等待吗?在我的情况下,这显然是可取的.我不希望Exec1和2同时使用该表,也不希望Exec2失败,因为Exec1已经在使用该表.

[编辑]我应该将临时表转换为表变量吗?

M.A*_*Ali 5

在sql server中,如果你创建一个本地临时表,它是一个#符号sql server使用一些低分和后端的一些ID.假设您#Temp在临时数据库中创建名为sql server的临时表创建具有名称的#Temp_______10912098表,在单独连接中创建的每个临时表都将在名称末尾具有其ID.


TempTables

这些是在不同连接中创建的所有临时表都具有名称#Temp但附加了一些下划线,并且unique idsql server用于区分它们.

  • 你不需要像Dommer所说的那样,但在你尝试创建它之前检查一个OBJECT的存在总是一个很好的做法.在你的proc中保留那段代码. (3认同)
  • 如果您每次从新会话中调用它(例如从Web应用程序),则不需要它,因为临时表的范围仅限于会话.有关详细信息,请参阅我的回答 (2认同)