我想以表格格式从存储过程中检索数据,就像普通的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;
答案 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
但是,要指出的是,如果查询返回多行,该怎么办?分配到这样的变量只会返回其中一条记录 - 将返回分配给它们的最后记录值。