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已存在


求解释
...全文
126 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
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
昵称被占用了 2010-10-04
  • 打赏
  • 举报
回复
想不出方法2来,是要先建立临时表后插入就可以了
DEATH64 2010-10-04
  • 打赏
  • 举报
回复
好像碰到过.在网上查的,不能取相同的名字,我又另取了个名子.
望高手详解.
昵称被占用了 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
  • 打赏
  • 举报
回复

大大们给个结果就好

22,300

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧