首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

请问动态拼接字段的表,怎么在后面引用

2013-07-01 
请教动态拼接字段的表,如何在后面引用create table tb(Namevarchar(10) ,Subject varchar(10) ,Resultint)

请教动态拼接字段的表,如何在后面引用



create table tb
(
   Name    varchar(10) ,
   Subject varchar(10) ,
   Result  int
)

insert into tb(Name , Subject , Result) values('张三' , '语文' , 74)
insert into tb(Name , Subject , Result) values('张三' , '数学' , 83)
insert into tb(Name , Subject , Result) values('张三' , '物理' , 93)
insert into tb(Name , Subject , Result) values('李四' , '语文' , 74)
insert into tb(Name , Subject , Result) values('李四' , '数学' , 84)
insert into tb(Name , Subject , Result) values('李四' , '物理' , 94)
go


declare @sql varchar(8000)
set @sql = 'select Name as ' + '姓名'
select @sql = @sql + ' , max(case Subject when ''' + Subject + ''' then Result else 0 end) [' + Subject + ']'
from (select distinct Subject from tb) as a
set @sql = @sql + 'into #temp from tb group by name'
exec(@sql) 

select * from #temp --对象名 '#temp' 无效。




这里生成的 #temp的列是不确定的,所以无法提前 Create table #temp。
用 ##temp是可以,但是这个多人操作会有很我问题。
不知还有什么解决方案。谢谢!
[解决办法]
把 'select * from #temp' 放到@sql里面.
[解决办法]

declare @sql varchar(8000)
set @sql = 'select Name as ' + '姓名'
select @sql = @sql + ' , max(case Subject when ''' + Subject + ''' then Result else 0 end) [' + Subject + ']'
from (select distinct Subject from tb) as a
set @sql = @sql + 'into #temp from tb group by name ; select * from #temp '
exec(@sql) 

[解决办法]
#temp  改成 ##temp
[解决办法]
select into 到真实表中,最前面,先判断这个真实表是否存在,存在就删除.

[解决办法]
由于exec()或者sp_executesql的上下文关系,里面定义的临时表,在外面无法引用的。

但反过来可以。

先创建个空的表,然后在exec()中做insert就行了:

create table A (ID int, Name varchar(10))

select * into #temp from A where 1=2

EXEC(N'insert into #temp values(1,''T'')')

select * from #temp

热点排行