临时表与表变量的深入探究(5)
来源:未知 责任编辑:责任编辑 发表时间:2015-09-17 09:42 点击:次
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
临时表在跨批处理中,里面的批处理可以调用到外面声明的表,表变量却不行(实体表只要是声明在前,都可以被调用)
总结: 无表关联操作,只作为中间集进行数据处理,建议用表变量;有表关联,且不能确定数据量大小的情况下,建议用临时表。
相关新闻>>
最新推荐更多>>>
- 发表评论
-
- 最新评论 更多>>