SQL Server 中本地(局部)临时表

本文通过创建本地和全局临时表的方式,演示了SQL Server Management Studio(SSMS)中会话的概念。本地临时表仅在创建它的会话中可见,而全局临时表则对所有会话可见。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一个SSMS查询窗口就是一个会话

通过本地临时表验证:

本地临时表仅在当前会话中可见;全局临时表在所有会话中都可见。
本地临时表的名称前面有一个编号符 (#table_name),而全局临时表的名称前面有两个编号符 (##table_name)。

打开一个查询窗口,新建本地临时表,插入数据,并查询

create table #temptable (id int identity(1,1) primary key,
                    name nvarchar(10) null);
go
insert into #temptable(name) values('mark'),
                              ('test');
go
select * from #temptable

局部临时表

再“新建查询”窗口,

select * from #temptable

局部临时表error

这是为什么呢?

这两个SSMS查询窗口是两个会话?

sp_who查看下,用事实说话:

spwho

52,53那列是SPID,我没有截完整。

SPID即为会话ID,会话ID不同,那即是两个会话了呀!

QQ截图20140515152840

转载于:https://www.cnblogs.com/cnmarkao/p/3730137.html

### 创建与使用临时表SQL Server 查询语句中,可以使用临时表来存储中间结果集,以便后续查询操作。临时表分为局部临时表和全局临时表两种类型。 - **局部临时表** 以 `#` 开头,仅对当前会话可见,并在当前会话结束后自动删除 [^2]。 - **全局临时表** 以 `##` 开头,对所有会话可见,在创建它的会话结束时自动删除 [^2]。 #### 使用 `CREATE TABLE` 创建临时表 可以通过显式定义字段和约束条件的方式创建临时表: ```sql CREATE TABLE #TempTable ( ID INT, Name NVARCHAR(50) ); ``` #### 使用 `SELECT INTO` 创建临时表 也可以通过现有数据快速创建临时表: ```sql SELECT * INTO #TempTable FROM YourTable; ``` 这种方式会复制源表的结构和数据到新创建的临时表中 [^3]。 --- ### 查询与操作临时表 一旦创建了临时表,就可以像普通表一样对其进行查询、插入、更新和删除操作。 #### 查询临时表 查询局部或全局临时表的数据格式如下: ```sql SELECT * FROM #TempTable; SELECT * FROM ##GlobalTempTable; ``` #### 插入数据到临时表临时表中插入数据的方式与常规表相同: ```sql INSERT INTO #TempTable (ID, Name) VALUES (1, 'Alice'); ``` #### 删除临时表 当不再需要临时表时,可以手动删除它: ```sql DROP TABLE #TempTable; DROP TABLE ##GlobalTempTable; ``` 若不手动删除,局部临时表会在当前会话结束时自动删除,而全局临时表则会在最后一个引用它的会话结束时删除 。 --- ### 性能优化与生命周期管理 在处理大型数据集时,可以在临时表上创建索引以提高查询效率。例如: ```sql CREATE INDEX IX_Name ON #TempTable(Name); ``` 由于临时表实际上存储在 `tempdb` 数据库中,因此即使是在内存中的操作,也需要考虑磁盘 I/O 对性能的影响 [^4]。合理使用索引、控制临时表的大小以及避免不必要的重复创建是提升性能的关键策略之一。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值