2015-04-23 170 views
0

我在SQL Server 2012中编写存储过程,并在读取存储过程在匹配所有条件和连接条件后将返回的行数时遇到问题。如何从存储过程中获取返回行数 - SQL Server 2012

我的存储过程是:

SELECT DISTINCT 
    COUNT(crs.CourseId) OVER() AS Recordcounts, 
    crs.CourseId, 
    crs.CourseName, 
    crs.CourseDescription, 
    (SELECT CourseGroupName FROM CourseGroup cgrp 
    WHERE cgrp.CourseGroupId = crs.CourseGroupId) AS Category 
FROM 
    Courses crs 
INNER JOIN 
    CourseRequests creq ON crs.CourseId = creq.CourseId 
WHERE 
    crs.Coursename <> '''' 

它针对的条件的一个返回16为“Recordcounts”,但在实际中,结果只有3行。

有人可以帮我吗?

感谢

下面的截图将更加清晰的思路有关问题的条件之一:enter image description here

+0

我没有得到你。如果它返回的记录比预期的多,那么查询有问题。 SP如何影响这一点?另外,我没有看到一组声明,所以我猜测有16个记录满足过滤器,所有的RecordCount都是1.对吗? – Pratik

+0

它正在返回正确的记录,但“Recordcounts”中的值是16,其中实际结果只有3行,所以“Recordcounts”应该是3,但我不知道如何得到它。 – Sachin

+0

你可以试试吗? SELECT DISTINCT计数(crs.CourseId)以上(由crs.CourseId分区)作为Recordcounts, crs.CourseId, crs.CourseName, crs.CourseDescription, (从CourseGroup CGRP选择CourseGroupName其中cgrp.CourseGroupId = crs.CourseGroupId)作为分类 FROM课程CRS 内对crs.CourseId = creq.CourseId 加入CourseRequests CREQ其中crs.Coursename <>“”“” – Pratik

回答

0

试试这个:

;with cte as(
SELECT distinct 
    crs.CourseId, 
    crs.CourseName, 
    crs.CourseDescription, 
    (SELECT CourseGroupName FROM CourseGroup cgrp 
    WHERE cgrp.CourseGroupId = crs.CourseGroupId) AS Category 
FROM 
    Courses crs 
INNER JOIN 
    CourseRequests creq ON crs.CourseId = creq.CourseId 
WHERE 
    crs.Coursename <> '''') 

Select *, (select COUNT(CourseId) from cte) AS Recordcounts 
from cte