请教各位如何在sql后台用sql语句增加这个临时表的列和列的数据
本人在sql后台写了一个临时表的存储过程,其代码如下:
create table #t(商品编号 varchar(300),商品名称 varchar(300),包装规格 decimal(18,4),整单位 varchar(50),散单位 varchar(50))
insert into #t(商品编号,商品名称,包装规格,整单位,散单位)
select a.code as '商品编号',a.name as '商品名称',a.packstandard as '包装规格',c.name as '整单位',b.name as '散单位' from t_bs_product as a
left join t_codes b on a.bs_unit_dispel_id =b.id
left join t_codes c on a.bs_unit_full_id =c.id
但是这个临时表还需增加列和数据,还需要从select name from t_codes where type=217里查出可随时自动增加的name(名称)作为列,从t_bs_product_datilej里查出数据作为列的数据。请教各位,如何在sql后台用sql语句增加这个临时表的列和列的数据。
问题点数:50、回复次数:7Top
1 楼happyflystone(无枪的狙击手)回复于 2006-03-14 12:33:44 得分 0
alter table #t add colname [type]Top
2 楼wgsasd311(自强不息)回复于 2006-03-14 12:48:58 得分 0
declare @colname varchar(40)
declare cur cursor for
select [name] from t_codes where type=217
open cur
fetch next from cur into @colname
while @@fetch_status=0
begin
exec('alter table #t add '+@colname+' varchar(20) ')
fetch next from cur into @colname
endTop
3 楼xej(初学者)回复于 2006-03-14 15:17:55 得分 0
wgsasd311(自强不息) 写的语句能增加所有的列,但是还不能实现从t_bs_product_datilej的表中查出所有相关列的数据并插入这个临时表中,如何实现这最后一步Top
4 楼wgsasd311(自强不息)回复于 2006-03-14 17:38:57 得分 0
create table #t(商品编号 varchar(300),商品名称 varchar(300),包装规格 decimal(18,4),整单位 varchar(50),散单位 varchar(50))
declare @colname varchar(4000),@sql varchar(8000)
declare cur cursor for
select [name] from t_codes where type=217
open cur
fetch next from cur into @colname
while @@fetch_status=0
begin
exec('alter table #t add '+@colname+' varchar(20) ')
fetch next from cur into @colname
end
--上面增加了所有列名后,下面插入数据
set @colname=''
select @colname=@colname+','+[name] from t_codes where type=217
set @sql='insert into #t(商品编号,商品名称,包装规格,整单位,散单位',+@colname+')'
set @sql=@sql+' select a.code ,a.name ,a.packstandard ,
c.name ,b.name '+@colname+' from t_bs_product as a
left join t_codes b on a.bs_unit_dispel_id =b.id
left join t_codes c on a.bs_unit_full_id =c.id '
exec(@sql)Top
5 楼wgsasd311(自强不息)回复于 2006-03-14 17:40:16 得分 0
create table #t(商品编号 varchar(300),商品名称 varchar(300),包装规格 decimal(18,4),整单位 varchar(50),散单位 varchar(50))
declare @colname varchar(4000),@sql varchar(8000)
declare cur cursor for
select [name] from t_codes where type=217
open cur
fetch next from cur into @colname
while @@fetch_status=0
begin
exec('alter table #t add '+@colname+' varchar(20) ')
fetch next from cur into @colname
end
--上面增加了所有列名后,下面插入数据
set @colname=''
select @colname=@colname+','+[name] from t_codes where type=217
set @sql='insert into #t(商品编号,商品名称,包装规格,整单位,散单位'+@colname+')'
set @sql=@sql+' select a.code ,a.name ,a.packstandard ,
c.name ,b.name '+@colname+' from t_bs_product as a
left join t_codes b on a.bs_unit_dispel_id =b.id
left join t_codes c on a.bs_unit_full_id =c.id '
exec(@sql)
Top
6 楼xej(初学者)回复于 2006-03-14 18:41:32 得分 0
wgsasd311(自强不息)的再一次回复还是没有实现最后一步,因为最后哪一步是从t_bs_product_datile里查出数据作为列的数据,而不是从t_bs_product里取出,两个表之间的相连是select a.code ,a.name ,a.packstandard ,
c.name ,b.name '+@colname+' from t_bs_product as a
left join t_codes b on a.bs_unit_dispel_id =b.id
left join t_codes c on a.bs_unit_full_id =c.id
left join t_bs_product_detail d on d.bs_product_id=a.id
但这个'+@colname+'我不会写代码Top
7 楼wgsasd311(自强不息)回复于 2006-03-14 22:33:02 得分 50
create table #t(商品编号 varchar(300),商品名称 varchar(300),包装规格 decimal(18,4),整单位 varchar(50),散单位 varchar(50))
declare @colname varchar(4000),@sql varchar(8000)
declare cur cursor for
select [name] from t_codes where type=217
open cur
fetch next from cur into @colname
while @@fetch_status=0
begin
exec('alter table #t add '+@colname+' varchar(20) ')
fetch next from cur into @colname
end
--上面增加了所有列名后,下面插入数据
declare @col varchar(400)
set @colname=''
select @colname=@colname+','+[name] from t_codes where type=217
--因为最后哪一步是从t_bs_product_datile里查出数据作为列的数据,而不是从t_bs_product里取出,两个表之间的相连是select
set @col=''
select @col=@col+',d.'+[name] from t_codes where type=217
set @sql='insert into #t(商品编号,商品名称,包装规格,整单位,散单位'+@colname+')'
set @sql=@sql+' select a.code ,a.name ,a.packstandard ,
c.name ,b.name '+@col+' from t_bs_product as a
left join t_codes b on a.bs_unit_dispel_id =b.id
left join t_codes c on a.bs_unit_full_id =c.id
left join t_bs_product_detail d on d.bs_product_id=a.id '
exec(@sql)Top




