临时表与表变量的深入探究(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
 
临时表在跨批处理中,里面的批处理可以调用到外面声明的表,表变量却不行(实体表只要是声明在前,都可以被调用)
 
总结: 无表关联操作,只作为中间集进行数据处理,建议用表变量;有表关联,且不能确定数据量大小的情况下,建议用临时表。
 
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • Request.ServerVariables 参数大全
  • 查看sql修改痕迹(SQL Change Tracking on Table)
  • 写给MongoDB开发者的50条建议Tip1
  • Percolator与分布式事务思考(二)
  • App数据层设计及云存储使用指南
  • PostgreSQL启动过程中的那些事三:加载GUC参数
  • SQL Server、Oracle、db2所提供的简装版(Express)比较
  • PostgreSQL 安装问题
  • 【自主研发-贡献给SQL Server人员】索引诊断与优化软件使用说明

数据库技术导航

SqlserverMysqlOracleDB2数据库数据库综合
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1