我正在研究这种特殊的sql存储过程,其中业务案例如下:
商业案例:
Table Specialties包含所有Specialties,每个记录都有一个位字段,用于说明它是处于活动状态还是处于非活动状态。我们始终只以下拉列表的形式显示该表中的活动记录。用户可以选择一个专业,以后可以将其停用。新要求是能够拉动该非活动记录以及结果集中的所有活动记录。
这就是我认为应该执行的操作:
如果没有为我要拉拔的人员分配专业,则所有活动记录都将填充下拉列表。
如果有一个与我要提拔的人员相关的不活动的专业知识,则我会将该specialidID作为参数发送到存储的proc中,并返回该不活动的记录以及活动记录以填充下拉列表。
以下是到目前为止我得到的:
到目前为止,如果我不传递任何SpecialtyId,那么我将返回正在运行的活动专业记录。当我发送specialityId参数时,它仅返回一个非活动记录,而不返回其他活动记录的其余部分。我还需要其余的活动记录以及该一条非活动记录。
DECLARE @specialtyId INT = null;
BEGIN
IF isnull(@specialtyId,'')=''
BEGIN
SELECT SpecialtyID AS Id, Specialty AS Name
FROM dbo.Specialties
WHERE IsActive = 1
ORDER BY Specialty;
END
ELSE
BEGIN
SET @specialtyId = @specialtyId ;
SELECT s.SpecialtyID AS Id, s.Specialty AS Name
FROM dbo.Specialties s
WHERE specialtyId = @specialtyId
GROUP BY s.Specialty, s.SpecialtyID
HAVING (Specialty IS NOT NULL)
AND (max(SpecialtyID) IS NOT NULL)
ORDER BY Name;
END
END
最佳答案
在我看来,这完全可以不用IF
来完成:
SELECT s.SpecialtyID AS Id,
s.Specialty AS Name
FROM dbo.Specialties s
WHERE specialtyID = @specialtyId
OR IsActive = 1;