--将动态SQL语句放在存储过程中,直接使用存储过程返回的数据集,没有必要单独存放一张表create procedure dbo.sp_test
as
declare @sql varchar(8000) 
set @sql='select 姓名,学号,班级名称' 
select @sql= @sql+ ',min(case when 科目名称 = ''' + 科目名称 + ''' then 科目分数 end) [' + 科目名称 + ']' 
from (select distinct 科目名称 from 表一) a 
set @sql=@sql+',sum(科目分数) as 总分  from 表一 group by 姓名,学号,班级名称 order by 总分 desc' 
exec (@sql)
go
--直接使用存储过程返回的数据集
select * from openrowset('sqloledb','Trusted_Connection=yes','exec pubs.dbo.sp_test') 
drop proc sp_test
go

解决方案 »

  1.   

    --改:--将动态SQL语句放在存储过程中,直接使用存储过程返回的数据集,没有必要单独存放一张表create procedure dbo.sp_test
    as
    declare @sql varchar(8000) 
    set @sql='select 姓名,学号,班级名称' 
    select @sql= @sql+ ',min(case when 科目名称 = ''' + 科目名称 + ''' then 科目分数 end) [' + 科目名称 + ']' 
    from (select distinct 科目名称 from 表一) a 
    set @sql=@sql+',sum(科目分数) as 总分  from 表一 group by 姓名,学号,班级名称 order by 总分 desc' 
    exec (@sql)
    go
    --直接使用存储过程返回的数据集
    select * from openrowset('sqloledb','Trusted_Connection=yes','exec 数据库名.dbo.sp_test') 
    drop proc sp_test
    go