创建动态表的问题

mooninglover 2005-02-06 02:51:04
想在存储过程中创建2个表#item_code(id,class),#HZ()
其中,#item_code的数据从一个表中查询出来的,数量不定,而#HZ()的列名为#item_code表中class列的所有数据,该怎么实现呢?
举个例子:
如果#item_code的内容:
id class
1 WB1024
2 WV1024
3 WS3371
那么#HZ表结构就应该为 #HZ(WB1024,WV1024,WS3371)

如果#item_code的内容:
id class
1 WB1024
2 WV1024
那么#HZ表结构就应该为 #HZ(WB1024,WV1024)

...全文
107 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
mooninglover 2005-02-16
  • 打赏
  • 举报
回复
多谢各位啦
jinjazz 2005-02-06
  • 打赏
  • 举报
回复
或者
set @str='create table #HZ ('
select @str=@str+rtrim(class)+' char(10), ' from #item_code
set @str=@str+'id integer)'

set @str=@str+ 'select * from #HZ'

exec( @str)

因为#HZ是在exec过程中创建,过程结束后临时表自动删除的
631799 2005-02-06
  • 打赏
  • 举报
回复
改成:

print @str
exec( @str;select * from #HZ)

jinjazz 2005-02-06
  • 打赏
  • 举报
回复
用全局临时表可以
set @str='create table ##HZ ('
select @str=@str+class+' float,' from #item_code
set @str=@str+'id int)'
jinjazz 2005-02-06
  • 打赏
  • 举报
回复
exec( @str)

go
select * from #HZ
mooninglover 2005-02-06
  • 打赏
  • 举报
回复
我试过了,打印出来的@str或者@s里的字符串拼的是正确的
单独执行打印出来的@str的内容创建表#HZ是成功的
但是,放在一起执行,实际上#HZ并没有创建

declare @str varchar(8000)

set @str='create table #HZ ('
select @str=@str+class+' float,' from #item_code
set @str=@str+'id int)'

print @str
exec( @str)
select * from #HZ

就会出错,说“对象名 '#HZ' 无效。”
jinjazz 2005-02-06
  • 打赏
  • 举报
回复
create table #item_code (class char(10))


insert into #item_code select 'WB1024'
insert into #item_code select 'WV1024'
insert into #item_code select 'WS3371'

declare @str varchar(1000)

set @str='create table #HZ ('
select @str=@str+rtrim(class)+' char(10), ' from #item_code
set @str=@str+'id integer)'
print( @str)

drop table #item_code
631799 2005-02-06
  • 打赏
  • 举报
回复
create table #item_code(id,class)
insert into #item_code select ... from tb where ....

declare @s varchar(8000)
set @s=''
select @s = @s +','+class from #item_code
set @s = 'create table #HZ('+replace(stuff(@s,1,1,''),',',' varchar(20),')+')'
jinjazz 2005-02-06
  • 打赏
  • 举报
回复
select id,class into #item_code from xx

create table #item_code (class char(10))


insert into #item_code select 'WB1024'
insert into #item_code select 'WV1024'
insert into #item_code select 'WS3371'

declare @str varchar(1000)

set @str='create table #HZ ('
select @str=@str+class+',' from #item_code
set @str=@str+'id)'
exec( @str)

drop table #item_code
jinjazz 2005-02-06
  • 打赏
  • 举报
回复
select id,class into #item_code from xx

create table #item_code (class char(10))


insert into #item_code select 'WB1024'
insert into #item_code select 'WV1024'
insert into #item_code select 'WS3371'

declare @str varchar(1000)

set @str='create table #HZ ('
select @str=@str+class+',' from #item_code
set @str=@str+'id)'
exec( @str)

drop table #item_code

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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