一尘不染

有/没有传递参数的条件存储过程

sql

我创建了一个存储过程,该存储过程在不传递任何参数的情况下应返回整个表。但是,如果传递了studentId,则返回她的详细信息。像这样

create procedure usp_GetStudents @studentId int = null
as
  if (@studentId = null)
    select * from Student
  else
    select * from Student where studentId = @studentId

输出

exec usp_GetStudents -- No records returned though there are records in the table


exec usp_GetStudents @studentId = null  -- No records returned


exec usp_GetStudents @studentId = 256  -- 1 entry returned

只是想知道返回表的所有条目的语法/逻辑中是否有错误?

谢谢


阅读 159

收藏
2021-03-17

共1个答案

一尘不染

你想测试使用空=,一个比较操作。如果您使用ANSI空值,反对任何比较nullfalse

以下@studentId所有 值(或null)在哪里false

@studentId = null  -- false
@studentId > null  -- false
@studentId >= null  -- false
@studentId < null  -- false
@studentId <= null  -- false
@studentId <> null -- false

因此,为了测试null您必须使用特殊谓词**is null** ,即:

@studentId is null
2021-03-17