您的位置:首页 > 其它

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

2005-04-22 11:51 447 查看
今天遇到一个需求,是根据逻辑判断动态创建局部临时表

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: