我有一个存储过程首先检查一个临时表(#temp_table),如果它存在,删除它,使用表,然后在完成后最后删除它。当用户做出某些事情来触发它时,这个SP会被随机地调用,并且很可能有时SP会在同一时间执行 - 或者有一些重叠。在MS SQL Server 2005中,当同一个SP的不同执行访问临时表时会发生什么?
假设我有Exec1和Exec2两个同样的SP创建,修改和删除#temp表,并且它们在毫秒内运行。
会发生什么?执行1结束时,Exec1会锁定#temp_table和Exec2等待吗?对我而言,这显然是可取的。我不希望两个Exec1 & 2同时使用该表,也不希望Exec2失败,因为Exec1已经在使用该表。
[编辑]我应该只是将我的临时表转换为表变量?
因此,在我的SP中,我有'IF OBJECT_ID('tempdb ..#temp_table')不为NULL \t DROP TABLE#temp_table' this does nothing nothing then?或者这可能会对其他执行产生不利影响? – jreed121
如果您每次从新会话中调用它(例如从Web应用程序),则不需要这样做,因为临时表的范围仅限于会话。查看我的答案以获取更多信息。 –
你不需要像Dommer说的那样,但是在尝试创建它之前,它总是一个检查OBJECT的存在的好习惯。在你的proc中保留这些代码。 –