首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >类存储过程中的情况

类存储过程中的情况
EN

Stack Overflow用户
提问于 2015-08-26 10:10:31
回答 2查看 50关注 0票数 0

我已返回以下SP

代码语言:javascript
复制
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
    )

当我按以下方式运行它时

代码语言:javascript
复制
exec [GetStudentsByUserId] '28f95465-f30f-4b8b-cc92-d4c4e8d73273', 1

它返回学生类型1的学生。

代码语言:javascript
复制
exec [GetStudentsByUserId] '28f95465-f30f-4b8b-cc92-d4c4e8d73273', 2

它还返回学生类型1的学生,但我需要2型的学生。

我只想得到类型1的学生,当我把roleType作为1传递给4,当我把roleType作为2传递时,我只想得到类型2的学生。

任何更好的解决方案都是非常值得注意的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-26 10:24:29

您的输入参数@roleTypebit数据类型。

根据MSDN

可以取值为1、0或NULL的整数数据类型。

但是您可以在值2上检查它,它总是等于1

票数 2
EN

Stack Overflow用户

发布于 2015-08-26 10:34:01

不可能将2传递到位类型。您需要将where子句更改如下。

代码语言:javascript
复制
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)
        )
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32223745

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档