Tsql 用于从筛选搜索中计数记录的存储过程

Tsql 用于从筛选搜索中计数记录的存储过程,tsql,sql-server-2008,Tsql,Sql Server 2008,我有一个存储过程,用于计算过滤搜索的记录,请参见下面 然而,如果我对“学术年”和“学生学习”课程进行过滤搜索,我会得到一个错误的计数 这是我的存储过程: @voornaam nvarchar(50) = null, @naam varchar(50) = null, @studierichting varchar(50) = null, @academiejaar varchar(9) = null, @gastinstelling nvarchar(100) = null, @periode

我有一个存储过程,用于计算过滤搜索的记录,请参见下面

然而,如果我对“学术年”和“学生学习”课程进行过滤搜索,我会得到一个错误的计数

这是我的存储过程:

@voornaam nvarchar(50) = null,
@naam varchar(50) = null,
@studierichting varchar(50) = null,
@academiejaar varchar(9) = null,
@gastinstelling nvarchar(100) = null,
@periode varchar(50) = null,
@recordCount int = NULL OUTPUT

AS

IF (@recordCount IS NOT NULL)
BEGIN
SET @recordCount = (SELECT
COUNT(*) FROM Studenten
INNER JOIN  Curriculum 
ON Studenten.id=Curriculum.studentid 
INNER JOIN erasmus 
ON Studenten.id=erasmus.studentid 
WHERE
([studenten].voornaam LIKE '%' + @voornaam + '%' OR @voornaam IS NULL)
    AND ([studenten].naam LIKE '%' + @naam + '%' OR @naam IS NULL)
    AND ([erasmus].academiejaar = @academiejaar OR @academiejaar IS NULL)
    AND ([erasmus].gastinstelling LIKE '%' + @gastinstelling + '%' OR       @gastinstelling IS NULL) 
    AND ([erasmus].periode = @periode OR @periode IS NULL)
    AND ([curriculum].studierichting_vorig LIKE '%' + @studierichting + '%' OR @studierichting IS NULL))

RETURN
END
我从这个存储过程中得到的计数太高了。我的记录计数是39,而应该是8

有人看到此sql查询中有错误吗

谢谢你的帮助

安东尼
比利时

与其返回记录计数,不如在给定相同参数的情况下选择返回的行。然后,您可以看到返回了哪些您不希望返回的行—查看实际数据可以更好地了解计数不同的原因。如果不知道您要传递的参数、表中的数据以及返回的39行,这里没有人能够给您一个简单的答案。

这个“大谜团”已经解开。似乎问题不在于存储过程,而在于我的webapplication代码,其中dropdownlist中的值未通过代码中的count函数:

CREATE PROCEDURE GETData
(
    @voornaam nvarchar(50) = null,
    @naam varchar(50) = null,
    @studierichting varchar(50) = null,
    @academiejaar varchar(9) = null,
    @gastinstelling nvarchar(100) = null,
    @periode varchar(50) = null,
    @recordCount int = NULL OUTPUT
)
AS

IF (@recordCount IS NOT NULL)
BEGIN

        ;with CTE AS
        (
            SELECT Distinct Studenten.id as CountID         
            FROM Studenten 
            INNER JOIN  Curriculum  ON Studenten.id=Curriculum.studentid 
            INNER JOIN erasmus ON Studenten.id=erasmus.studentid 
            WHERE ([studenten].voornaam LIKE '%' + @voornaam + '%' OR @voornaam IS NULL)
            AND ([studenten].naam LIKE '%' + @naam + '%' OR @naam IS NULL)
            AND ([erasmus].academiejaar = @academiejaar OR @academiejaar IS NULL)
            AND ([erasmus].gastinstelling LIKE '%' + @gastinstelling + '%' OR @gastinstelling IS NULL) 
            AND ([erasmus].periode = @periode OR @periode IS NULL)
            AND ([curriculum].studierichting_vorig LIKE '%' + @studierichting + '%' OR @studierichting IS NULL)
        )
        SELECT @recordCoun=COUNT(CountID)
        From CTE 

RETURN
END
private int CountDossiers()
        {
            var studentCriteria = new StudentCriteria
                               {
                                   Voornaam = txtSearchVoornaam.Text,
                                   Naam = txtSearchNaam.Text
                               };

            if (!string.IsNullOrEmpty(ddlSearchStudieRichting.SelectedValue))
            {
                studentCriteria.Studierichting = (Studierichting)Enum.Parse(typeof(Studierichting), ddlSearchStudieRichting.SelectedValue);
            }
            **if (!string.IsNullOrEmpty(ddlSearchAcademieJaar.SelectedValue))
            {
                studentCriteria.Academiejaar = ddlSearchAcademieJaar.SelectedValue;
            }**
            return StudentManager.SelectCountForGetList(studentCriteria);

        }
这就是为什么我每次都得到了错误的记录计数,所有计算的学年的记录,而不是搜索字段中输入的学年

现在我觉得有点傻:


Anthony

Hi Yogesh,谢谢你的帮助,我尝试了你的代码,如果我在SQL Server Management Studio中执行存储过程,我会得到确切的记录数,8:使用[erasmusmanager]去声明@return_value int,@recordCount int EXEC@return_value=[dbo].[sprocStudentSearchList]@studieriching=N'socialogie',@academiejaar=N'2011-2012',@recordCount=@recordCount输出选择@recordCount作为N'@recordCount'选择'Return Value'=@Return\u Value GO。但是,如果在我的Web应用程序中,记录计数仍然是39。有点让我发疯!AnthonyIF存储程序在SSMS中给出的结果比在应用中给出的结果更准确。您能否提供获取此存储过程结果的应用程序代码?