我已返回以下SP
ALTER PROCEDURE [dbo].[GetStudentsByUserId]
@userId UNIQUEIDENTIFIER,
@roleType bit
AS
SET NOCOUNT ON;
DECLARE @classId UNIQUEIDENTIFIER
EXEC [dbo].[GetClassId] @userId,@classId OUTPUT
SELECT
B.StudentId,
B.StudentName,
B.Description,
B.StudentType
FROM
ClassStudents A
INNER JOIN
Student B
ON
B.StudentId = A.StudentId
WHERE
A.CassId = @classId
AND
(
B.StudentType =
CASE
@roleType
when 1
then 1
when 2
then 2
END
OR
B.StudentType =
CASE
@roleType
when 1
then 4
when 2
then 2
END
)当我按以下方式运行它时
exec [GetStudentsByUserId] '28f95465-f30f-4b8b-cc92-d4c4e8d73273', 1它返回学生类型1的学生。
exec [GetStudentsByUserId] '28f95465-f30f-4b8b-cc92-d4c4e8d73273', 2它还返回学生类型1的学生,但我需要2型的学生。
我只想得到类型1的学生,当我把roleType作为1传递给4,当我把roleType作为2传递时,我只想得到类型2的学生。
任何更好的解决方案都是非常值得注意的。
发布于 2015-08-26 10:24:29
发布于 2015-08-26 10:34:01
不可能将2传递到位类型。您需要将where子句更改如下。
ALTER PROCEDURE [dbo].[GetStudentsByUserId]
@userId UNIQUEIDENTIFIER,
@roleType bit
AS
SET NOCOUNT ON;
DECLARE @classId UNIQUEIDENTIFIER
EXEC [dbo].[GetClassId] @userId,@classId OUTPUT
SELECT
B.StudentId,
B.StudentName,
B.Description,
B.StudentType
FROM
ClassStudents A
INNER JOIN
Student B
ON
B.StudentId = A.StudentId
WHERE
A.CassId = @classId
AND
(
(B.StudentType in (2) and
and @roleType=1)
OR
(B.StudentType in (1,4) and
and @roleType=0)
)https://stackoverflow.com/questions/32223745
复制相似问题