如何使值为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;