这更多是性能问题,而不是代码。
因此,根据我们的要求,我们需要在特定的“管理员”下检查具有指定ssn的数据库中的人员。我们还需要检查该人的配偶是否也位于同一管理员下。
我们有一个存储过程,可以检索指定管理员下的所有人员。
在我们的C#代码中,我们有一个约会列表。每个对象都保存该人和配偶的ssn数据以及管理员ID。
foreach(var obj in myList) {
Guid adminID = obj.Admin;
string spouseSSN = obj.SpouseSSN,
iSSN = obj.PersonSSn;
List < Person > adminSub = RetrievePersonsUnderAdmin(adminID); //calls the sp
Person spouse = adminSub.FirstOrDefault(p => p.SSN == spouseSSN);
Person iPerson = adminSub.FirstOrDefault(p => p.SSN == iSSN);
}
那是先前的实现。现在,我们想修改sp,以便可以使用ssn立即获取该人。我所做的就是接受一个可选的@OptionalCondition nvarchar(max)
参数,该参数将添加到WHERE
子句中:
BEGIN
DECLARE
@query nvarchar(max)
SET @query =
'SELECT
. . . . -- select columns
WHERE
. . . . -- where clause
' + ISNULL(@CustomCondition, '') -- additional conditions @CustomCondition, optional
EXEC sys.sp_executesql @query
END
这样,我们可以在C#代码中使用它来完成此操作:
Person spouse = RetrievePersonsUnderAdmin(adminID, string.Format("AND p.SSN = '{0}'", spouseSSN)).FirstOrDefault();
Person spouse = RetrievePersonsUnderAdmin(adminID, string.Format("AND p.SSN = '{0}'", iSSN )).FirstOrDefault();
问题是,调用2 sps或先前的实现哪个更好?请注意,管理员可以拥有500-1000个下属。
编辑:
如果可能的话,您可以在此处发布答案,同时还包括您在我的代码中观察到的所有缺陷。这样,未来的开发人员可能会偶然发现我遇到的相同问题,并希望这篇文章可以对他们有所帮助。感谢您在评论部分提供的帮助。