如何使值为0的where子句不检查SQL Server存储过程中的where?

如何使值为0的where子句不检查SQL Server存储过程中的where?,sql,sql-server,stored-procedures,Sql,Sql Server,Stored Procedures,我有一个存储过程: CREATE PROCEDURE ListIds @ObjectiveId int, @SubjectId int, AS BEGIN SELECT Question.QuestionUId FROM Objective WHERE Objective.objectiveId = @ObjectiveId AND Objective.subjectId = @SubjectId END; 如何使存储过程@Object

我有一个存储过程:

CREATE PROCEDURE ListIds
    @ObjectiveId int,
    @SubjectId int,
AS
BEGIN

    SELECT Question.QuestionUId
    FROM Objective
    WHERE Objective.objectiveId = @ObjectiveId 
    AND   Objective.subjectId = @SubjectId

END;
如何使存储过程@ObjectiveId为0时,不会基于表中的ObjectiveId选择。但是,我希望始终选择主题Id。

请尝试以下操作:

CREATE PROCEDURE ListIds
    @ObjectiveId int,
    @SubjectId int,
AS
BEGIN

    SELECT Question.QuestionUId
    FROM Objective
    WHERE (ObjectiveId = 0 OR Objective.objectiveId = @ObjectiveId)
       AND Objective.subjectId = @SubjectId

END;
CREATE PROCEDURE ListIds
    @ObjectiveId  INT,
    @SubjectId    INT 
AS
BEGIN

    SELECT  QuestionUId
    FROM    Objective
    WHERE   Objective.subjectId = @SubjectId AND 
            (ISNULL(@ObjectiveId,0) = 0 OR Objective.objectiveId = @ObjectiveId) 

END;

如果为0,则应选择什么?仅根据SubjectId-1进行选择这是不正确的,因为他希望始终通过
SubjectId
进行筛选:“我希望始终根据主题Id进行选择”。仅当
ObjectiveId 0
时,您才进行筛选,这也是不正确的,因为他只想在参数为0时跳过
ObjectiveId
筛选。当
ObjectiveId
null
时,这将不起作用。然后处理该值为null(c),=”的情况
SELECT Question.QuestionUId
FROM Objective
WHERE (Objective.objectiveId = @ObjectiveId OR @ObjectiveId = 0)  
      AND Objective.subjectId = @SubjectId
CREATE PROCEDURE ListIds
    @ObjectiveId  INT,
    @SubjectId    INT 
AS
BEGIN

    SELECT  QuestionUId
    FROM    Objective
    WHERE   Objective.subjectId = @SubjectId AND 
            (ISNULL(@ObjectiveId,0) = 0 OR Objective.objectiveId = @ObjectiveId) 

END;