我在存储过程中创建临时表。我知道它们会在每次会话中被创建和销毁,但有些事情并不清楚。让我们说两个用户访问我调用创建临时表的存储过程的网页,当两个用户创建相同的临时表时是否会发生冲突?
由于
答案 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
如果您关闭其中一个查询窗口并刷新临时表列表,您将看到一个表已被删除。