--将动态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
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
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