SQL Server中的临时表在存储过程中创建和使用

时间:2014-04-16 13:30:18

标签: sql-server tsql stored-procedures temp-tables

我在存储过程中创建临时表。我知道它们会在每次会话中被创建和销毁,但有些事情并不清楚。让我们说两个用户访问我调用创建临时表的存储过程的网页,当两个用户创建相同的临时表时是否会发生冲突?

由于

2 个答案:

答案 0 :(得分:3)

如果您创建一个本地临时表(如#temp),那么没有问题。然而,全局临时表(## Temp)可以被其他会话访问,因此我从不使用它们,除非我别无选择。来自联机丛书:

  

本地临时表仅在其创建者期间可见   与表格相同的SQL Server实例连接   首先创建或引用。之后删除本地临时表   用户断开与SQL Server实例的连接。全球临时   表对任何用户和任何连接都可见   创建,并在引用该表的所有用户时删除   断开与SQL Server实例的连接。

答案 1 :(得分:1)

每个SQL连接都会创建临时表,因此调用相同存储过程的两个用户将创建相关表的单个实例。

最简单的方法是在2个单独的查询窗口中运行以下查询:

select 1 as someid
into #temp

每个窗口都有自己的连接,因此会创建一个唯一的临时表。

如果您查看System Databases > TempDB > Temporary Tables(您可能需要刷新表格列表),您将看到2个唯一命名的表格,如:

#temp________xxx1
#temp________xxx2

如果您关闭其中一个查询窗口并刷新临时表列表,您将看到一个表已被删除。