局部临时表和表变量的重复创建问题随笔

 

今天遇到一个需求,是根据逻辑判断动态创建局部临时表

 1declare @flag bit 
 2
 3select @flag=1 
 4
 5--当@flag=1时,临时表第2个字段a的类型为float 
 6
 7--当@flag<>1时,临时表第2个字段a的类型为int 
 8
 9if @flag=1 
10
11begin 
12
13       create table #TemTable(ids int,   a float
14
15end 
16
17else 
18
19begin 
20
21       create table #TemTable(ids int,a int
22
23end 
24
25

 

 

运行时出现错误提示如下:

服务器: 消息 2714,级别 16,状态 1,行 9

数据库中已存在名为 '#TemTable' 的对象。

 

看来创建临时表也和声明变量一样

 

想来想去,考虑了解决方式有2:

 

1.命名2个不同的表名称

#TemTable1#TemTable2

 

2.先创建表的基本结构,再根据条件修改表结构

 1declare @flag bit 
 2
 3select @flag=1 
 4
 5create table #TemTable(ids int
 6
 7if @flag=1 
 8
 9begin 
10
11       alter table #TemTable 
12
13              add a float 
14
15end 
16
17else 
18
19begin 
20
21       alter table #TemTable 
22
23              add a int 
24
25end 
26
27go 
28
29--表结构改变后要重新编译 
30
31select * from #TemTable 
32
33insert into #TemTable 
34
35       select 1,1 
36
37drop table #TemTable 
38

请注意表变量也会有这样的问题

希望上面提到的知识对你有所提示

当然欢迎交流和指正

 

blog:

http://www.cnblogs.com/aierong

author:aierong

email:aierong@126.com

 

posted @ 2005-04-22 11:51  aierong  阅读(2664)  评论(5编辑  收藏  举报