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);
}
这就是为什么我每次都得到了错误的记录计数,所有计算的学年的记录,而不是搜索字段中输入的学年
现在我觉得有点傻:
AnthonyHi 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中给出的结果比在应用中给出的结果更准确。您能否提供获取此存储过程结果的应用程序代码?