设为首页 加入收藏

TOP

临时表与表变量的深入探究(三)
2014-11-24 07:50:22 来源: 作者: 【 】 浏览:8
Tags:临时 变量 深入 探究
DECLARE @PDTEMP TABLE (SPID INT, Status VARCHAR(32) NULL)
INSERT @PDTEMP EXEC pWho
SELECT * FROM @PDTEMP
GO
www.2cto.com
两者都可以正常使用,但是有一点必须注意,对于2008以前的版本,表变量是不支持这样操作的
9)是否可以动态的生成列
--临时表
SELECT * INTO #TEMP_objects FROM sys.objects; --成功执行
--表变量
SELECT * INTO @PDTEMP FROM sys.objects; --报错
表变量不能生成动态列,因为表变量一旦创建,他的架构就是固定的,而临时表可以更改架构甚至是索引
10)生命期是否相同
if OBJECT_ID('tempdb..#temp_foo') is not null drop table #temp_foo
--临时表
DECLARE @sql VARCHAR(8000)
SET @sql = 'Create TABLE #temp_foo (a INT,b INT,c INT) Insert into #temp_foo values(1,1,1) '
EXEC(@sql)
INSERT #temp_foo SELECT 1,2,3
SELECT * FROM #temp_foo
GO
www.2cto.com
--表变量
DECLARE @sql VARCHAR(8000)
SET @sql = 'DECLARE @foo TABLE(a INT,b INT,c INT) Insert into @foo values(1,1,1)'
EXEC(@sql)
INSERT @foo SELECT 1,2,3
Go;
同时存在两个不同的批处理,外面的批处理要调用里面的批处理声明的表,临时表和表变量均不能使用
--临时表
DECLARE @sql VARCHAR(8000)
Create TABLE #temp_foo (a INT,b INT,c INT)
SET @sql = 'Insert into #temp_foo values(1,1,1)'
EXEC(@sql)
INSERT #temp_foo SELECT 1,2,3
SELECT * FROM #temp_foo
GO
--可以执行
--表变量
DECLARE @sql VARCHAR(8000)
DECLARE @foo TABLE(a INT,b INT,c INT)
SET @sql = 'Insert into @foo values(1,1,1)'
EXEC(@sql) www.2cto.com
INSERT @foo SELECT 1,2,3
SELECT * FROM @foo
Go
--执行到EXEC(@SQL)报错,找不到@foo
临时表在跨批处理中,里面的批处理可以调用到外面声明的表,表变量却不行(实体表只要是声明在前,都可以被调用)
总结: 无表关联操作,只作为中间集进行数据处理,建议用表变量;有表关联,且不能确定数据量大小的情况下,建议用临时表。
首页 上一页 1 2 3 下一页 尾页 3/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇数据质量检查【整理】 下一篇员工薪资历史-Union实现

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·求navicat for mysql (2025-12-26 13:21:33)
·有哪位大哥推荐一下m (2025-12-26 13:21:30)
·MySQL下载与安装教程 (2025-12-26 13:21:26)
·Linux_百度百科 (2025-12-26 12:51:52)
·Shell 流程控制 | 菜 (2025-12-26 12:51:49)