我如何以普通查询的表格格式从存储过程中检索数据

时间:2010-09-08 13:25:09

标签: sql-server-2005

我想以表格格式从存储过程中检索数据,就像普通的sql查询一样。

我必须改变什么?

我的程序是......

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go


ALTER PROCEDURE [dbo].[agg] 

AS    
DECLARE @stud int,
@lec int,
@dept varchar(50),
@sem int

select @stud=s.sem_no_stud,
@lec=sum(convert (int,sub.sub_lec)),@dept=d.dept_name,@sem=count(s.sem_id)
from sem_info s,sub_info sub,dept_info d,course_info co 
where sub.sdept=d.dept_id and 
s.sem_caurse_id=co.co_id and 
sub.sub_sem_id=s.sem_id and co.co_id=149 
group by d.dept_name,s.sem_id,s.sem_no_stud

return (@stud)
return(@lec)

exec agg;

2 个答案:

答案 0 :(得分:1)

变量似乎没有用处。您可以直接SELECT。另外,在go之前需要exec以避免无意中创建递归过程,并且使用如下的显式JOIN语法将更安全,以避免无意中的笛卡尔连接。

ALTER PROCEDURE [dbo].[agg] 

AS    

 SELECT   s.sem_no_stud ,
         SUM(CONVERT (INT,sub.sub_lec)),
         d.dept_name ,
         COUNT(s.sem_id)
FROM     sem_info s
         JOIN sub_info sub
         ON       sub.sub_sem_id =s.sem_id
         JOIN dept_info d
         ON       sub.sdept =d.dept_id
         JOIN course_info co
         ON       s.sem_caurse_id=co.co_id
WHERE    co.co_id =149
GROUP BY d.dept_name,
         s.sem_id ,
         s.sem_no_stud

go

exec [dbo].[agg] ;

答案 1 :(得分:0)

您只需编写带有变量的SELECT语句,如下所示:

SELECT @stud AS ColumnNameA, @lec AS ColumnNameB

但是,要指出的是,如果查询返回多行,该怎么办?分配到这样的变量只会返回其中一条记录 - 将返回分配给它们的最后记录值。