日期:2014-05-17  浏览次数:20532 次

求助:这样动态拼接对吗,为什么报错啊
有一个临时表#temptabmon1,字段有固定的和动态生成的,其中动态生成的字段名和个数不定,例如:
name 固定字段
ID 固定字段
生日 固定字段
地址 固定字段
成绩1 动态生成
成绩2 动态生成
成绩3 动态生成
成绩4 动态生成



成绩X 动态生成

我想select 所有成绩字段,但不是不要name和ID,语句如下:
SQL code

declare @s varchar(1000)  
 select @s = isnull(@s+',', '') + [name] from tempdb.dbo.syscolumns where id = object_id(N'tempdb..#temptabmon1')  and name not in ('name','id')

set @s='select a.生日,a.地址'+@s+ ' into #temptab from #temptabmon1 a'
exec(@s)
select * from #temptab
drop table #temptab
drop table #temptabmon1


但总是有错误
Msg 208, Level 16, State 0, Procedure ImptMonthlyMtr, Line 101
Invalid object name '#temptab'.


------解决方案--------------------
SQL code
declare @s varchar(1000) 
select @s='if object_id('tempdb..#temptab') is not null
drop table #temptab
create table #temptab
(xxxx)'
 select @s =@s+ isnull(@s+',', '') + [name] from tempdb.dbo.syscolumns where id = object_id(N'tempdb..#temptabmon1')  and name not in ('name','id')

set @s='select a.生日,a.地址'+@s+ ' into #temptab from #temptabmon1 a'
exec(@s)

---与其这样 还不如直接用实体表

------解决方案--------------------
又是这个select into 的问题
在 EXEC 里面创建的临时表 在exec执行完的时候就是释放了