create table 不能建表

sun8330 2011-07-25 01:59:44
declare @sql varchar(200)
select @sql='create table #tmpdb (god_code char(8) not null,god_desc varchar(50) not null)'
exec (@sql)

以上指令运行成功,但临时表#tempdb没有建出来,不知何故,请各位指点
...全文
105 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
cd731107 2011-07-25
  • 打赏
  • 举报
回复
动态语句是一个独立的批处理过程,相当于最后执行了一个go命令,表示本次批处理结束了,
定义的局部变量什么的都无效了
cd731107 2011-07-25
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 sun8330 的回复:]
你意思是用execute这个指令执行完了以后,程序会话就完成了吗?如果是这样,程序一建临时表完成后,假如要再插入资料的话,不是作不了?该如何处理?
[/Quote]
对的,所以提示你用##全局临时表或者真实表
sun8330 2011-07-25
  • 打赏
  • 举报
回复
你意思是用execute这个指令执行完了以后,程序会话就完成了吗?如果是这样,程序一建临时表完成后,假如要再插入资料的话,不是作不了?该如何处理?
xuam 2011-07-25
  • 打赏
  • 举报
回复
程序一:
当前会话完成,临时表注销
程序二:
当前会话没有完成

[Quote=引用 11 楼 sun8330 的回复:]
程序一:
declare @sql varchar(200)
select @sql='create table #tmpdb (god_code char(8) not null,god_desc varchar(50) not null)'
exec (@sql)
select * from #tmpdb
最后一行运行错误
程序二:
select * into #temp fro……
[/Quote]
sun8330 2011-07-25
  • 打赏
  • 举报
回复
程序一:
declare @sql varchar(200)
select @sql='create table #tmpdb (god_code char(8) not null,god_desc varchar(50) not null)'
exec (@sql)
select * from #tmpdb
最后一行运行错误
程序二:
select * into #temp from abc
select * from #temp
运行正常

这两个程序,为何程序一出错,程序二正常?
疯行无忌 2011-07-25
  • 打赏
  • 举报
回复
1楼对了
l4kangaxx 2011-07-25
  • 打赏
  • 举报
回复
将创建语句,处理语句和结果查询语句放在一个varchar变量里处理就好了,或者就像一楼说的那样用##全剧临时表
xuam 2011-07-25
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 sun8330 的回复:]
可是为何在程序中,用select * into #temp from abc 类似这种语句中生成的临时表在程序运行完了后,只要查询窗口没有关,临时表就存在呢?
[/Quote]

这个结果不是你建的临时表了.
AcHerat 元老 2011-07-25
  • 打赏
  • 举报
回复
那是因为当前会话没有完成,临时表不会自动注销。
sun8330 2011-07-25
  • 打赏
  • 举报
回复
可是为何在程序中,用select * into #temp from abc 类似这种语句中生成的临时表在程序运行完了后,只要查询窗口没有关,临时表就存在呢?
AcHerat 元老 2011-07-25
  • 打赏
  • 举报
回复
试试全部临时表,或者你在外部创建。
AcHerat 元老 2011-07-25
  • 打赏
  • 举报
回复
动态创建?貌似不支持哈!
gdstfox 2011-07-25
  • 打赏
  • 举报
回复
这个是临时表的生命周期问题,1楼已经回答了
-晴天 2011-07-25
  • 打赏
  • 举报
回复
临时表是在一次会话中有效的,因此,当 exec 执行完毕后,临时表就会被释放.如果要在动态语句里创建临时表,要用全局临时表的形式,即用 ##temptb.
cd731107 2011-07-25
  • 打赏
  • 举报
回复
这个临时表是放在动态语句里执行的,执行完以后相当于一个批处理结果了,这个临时表就被删除了,
除非你用真实表,或##全局临时表

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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