MS SQL的BUG?

三断笛 2011-12-16 10:30:24
直接上代码:

IF 1=2
begin
SELECT * INTO #t FROM t1
DROP TABLE #t
end
IF 1=3
begin
SELECT * INTO #t FROM t1
DROP TABLE #t
end


我认为上面的代码是没问题的.可是MS SQL2005/2008总是报错,数据库中已存在名为 '#t' 的对象。
你说这是不是BUG?
凭啥不让我创建两次#t!
...全文
60 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
唐诗三百首 2011-12-19
  • 打赏
  • 举报
回复
当两个表结构很不一样的时候,用动态SQL完成,

declare @sql varchar(2000)

IF 1=2
begin
select @sql='SELECT * INTO #t FROM '+'t1'+';DROP TABLE #t'
end
IF 1=3
begin
select @sql='SELECT * INTO #t FROM '+'t1'+';DROP TABLE #t'
end

exec(@sql)
三断笛 2011-12-19
  • 打赏
  • 举报
回复
问题解决,结帖给分!
三断笛 2011-12-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 roy_88 的回复:]
当然会报错,在同一会话时检查语句通不过

这样改,把if放在where条件处

SELECT * INTO #t FROM t1 where 1=2
union all
select * from t1 where 1=3

或创建临时表接收


SQL code
create table #T(col.....)

if ..
insert into #……
[/Quote]
我觉得MS在编译时检查这个太自作多情了。
当两个表结构很不一样的时候就很难处理了。
--小F-- 2011-12-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 betamark 的回复:]
String sql = "insert into stu values(" + id + "," + name + "," + sex + "," + age + "," + weight + ")";
这句话有错吗
[/Quote]这个是对的
Cokemark 2011-12-16
  • 打赏
  • 举报
回复
String sql = "insert into stu values(" + id + "," + name + "," + sex + "," + age + "," + weight + ")";
这句话有错吗
中国风 2011-12-16
  • 打赏
  • 举报
回复
当然会报错,在同一会话时检查语句通不过

这样改,把if放在where条件处

SELECT * INTO #t FROM t1 where 1=2
union all
select * from t1 where 1=3

或创建临时表接收

create table #T(col.....)

if ..
insert into #T...
else if
insert into #T ...
三断笛 2011-12-16
  • 打赏
  • 举报
回复
如果两次插入临时表的字段不一样呢?

22,209

社区成员

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

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