if 条件判断出错 插入临时表的问题

vip__888 2010-10-04 03:41:02
declare @a varchar(4)
set @a='aa'

if @a='aa'
begin
select * into #tb from...
end
else
begin
select * into #tb from...
end


错误
//结果
#tb已存在


求解释
...全文
73 点赞 收藏 12
写回复
12 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
vip__888 2010-10-04
[Quote=引用 9 楼 sqlcenter 的回复:]
SQL code
--如果#tb的结构相同, 先创建表结构
select top 1 * into #tb from ... where 1=0

if @a='aa'
begin
...
end
else
begin
...
end

--如果#tb的结构不相同, 那么应该创建不同名称的临时表, 就不会有这样的问题发生
[/Quote]
原来如此。
回复
喜-喜 2010-10-04
[Quote=引用 10 楼 vip__888 的回复:]
引用 3 楼 haiwer 的回复:
方法1


SQL code
declare @a varchar(4)
set @a='aa'

create table #tb (...)

if @a='aa'
begin
insert #tb(...)
select ... into #tb from...
end
else
begin
insert #tb(...……
[/Quote]

6 楼的试试
回复
vip__888 2010-10-04
[Quote=引用 3 楼 haiwer 的回复:]
方法1


SQL code
declare @a varchar(4)
set @a='aa'

create table #tb (...)

if @a='aa'
begin
insert #tb(...)
select ... into #tb from...
end
else
begin
insert #tb(...)
select ..……
[/Quote]
不行啊
回复
SQLCenter 2010-10-04
--如果#tb的结构相同, 先创建表结构
select top 1 * into #tb from ... where 1=0

if @a='aa'
begin
...
end
else
begin
...
end

--如果#tb的结构不相同, 那么应该创建不同名称的临时表, 就不会有这样的问题发生
回复
喜-喜 2010-10-04
[Quote=引用楼主 vip__888 的回复:]
SQL code
declare @a varchar(4)
set @a='aa'

if @a='aa'
begin
select * into #tb from...
end
else
begin
select * into #tb from...
end


错误

SQL code
//结果
#tb已存在


求解释
[/Quote]

我是这样理解的:(SQL语句在被“执行”时,应该是先分析、后执行的)
1、当在查询分析器中执行 SQL 语句时,先是对语句进行分析,看语句是否符合语法规则、是否符合逻辑,这个过程是全部执行的,也就是说不管 if 条件是否成立,查询分析器都对 SQL 语句进行分析

2、我们所看到的 “#tb 已存在”这个错误就是在“查询分析器”的分析过程中出现的

3、而当查询分析器分析过语句没有错误时,才开始按照 if 逻辑进行判断,并输出正确结果
回复
vip__888 2010-10-04
[Quote=引用 5 楼 haiwer 的回复:]
想不出方法2来,是要先建立临时表后插入就可以了
[/Quote]
恩 我试一下
回复
喜-喜 2010-10-04
--另外创建一个数据表试试

create table tt(col nvarchar(100))

declare @a varchar(4)
set @a='aa'

if @a='aa'
begin
insert into tt select * from ..
end
else
begin
insert into tt select * from ..
end

select * from tt

drop table tt
回复
想不出方法2来,是要先建立临时表后插入就可以了
回复
DEATH64 2010-10-04
好像碰到过.在网上查的,不能取相同的名字,我又另取了个名子.
望高手详解.
回复
方法1

declare @a varchar(4)
set @a='aa'

create table #tb (...)

if @a='aa'
begin
insert #tb(...)
select ... into #tb from...
end
else
begin
insert #tb(...)
select ... into #tb from...
end
回复
win7cc 2010-10-04
虚拟表应该还存在
回复
vip__888 2010-10-04

大大们给个结果就好
回复
相关推荐
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2010-10-04 03:41
社区公告
暂无公告