动态复制表结构问题?请大家指点下

wcqgm 2008-12-30 04:36:02
各位:小弟在写一个存储过程,其中有一段功能是要复制动态表的结构.就是说表名不知道,只有在运行时才知道其名称.我用字符串执行.

set @sql = 'Select * into #tmp From ' + @TABLENAME + ' Where id='+ @i;
exec(@sql)
select * from #tmp
就是把@tablename中的第@i记录连同其表结构一起复制到#tmp中.
我执行之后,无法运行select * from #tmp,提示找不到临时表.
只能在字符串中有效,我想不到什么好的办法,请大家指点下.
祝各位 Happy '牛' year.
...全文
84 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
lgxyz 2008-12-31
  • 打赏
  • 举报
回复
set @sql = 'Select * into ##tmp From ' + @TABLENAME + ' Where id='+ @i; 
exec(@sql)
select * from ##tmp
Cindy1983 2008-12-31
  • 打赏
  • 举报
回复
##估计也不行吧。

##tem 全局临时表,数据表中的任何用户均可对该表执行操作。如果该表在您创建后有其他用户使用,不会删除,否则 SQL Server在所有用户断开连接后删除该表。
ChinaJiaBing 2008-12-31
  • 打赏
  • 举报
回复

select name into #tem from dbo.sysobjects where type='u'
select * from #tem
358087202 2008-12-31
  • 打赏
  • 举报
回复
改为##temp
wcqgm 2008-12-31
  • 打赏
  • 举报
回复
楼上的,你难道没有看明白我的意思吗?
nalizt 2008-12-30
  • 打赏
  • 举报
回复
set @sql = 'Select * into ##tmp From ' + @TABLENAME + ' Where id='+ @i;
exec(@sql + 'select * from ##tmp')
wcqgm 2008-12-30
  • 打赏
  • 举报
回复
可能用sp_executesql来解决呢?
wcqgm 2008-12-30
  • 打赏
  • 举报
回复
是呀,我现在是想如何能动态地复制一个临时表.因为实在不想去用create table 来创建.
dpzc_love 2008-12-30
  • 打赏
  • 举报
回复
临时表的可见性是在创建它的会话的当前级别和内部级别.
楼主的#tmp是被创建于@sql 中.所以在脱离了@sql 后使用会提示找不到.
楼上正解.赞!
wcqgm 2008-12-30
  • 打赏
  • 举报
回复
我要在字符串外访问这个临时表.因为这个临时表是在后面才能用到的.
rucypli 2008-12-30
  • 打赏
  • 举报
回复
在动态sql语句中创建的局部临时表,在语句运行完毕后就自动删除了
rucypli 2008-12-30
  • 打赏
  • 举报
回复
改为
set @sql = 'Select * into #tmp From ' + @TABLENAME + ' Where id='+ @i; 
exec(@sql + 'select * from #tmp')

34,838

社区成员

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

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