我创建了一个存储过程,该存储过程在不传递任何参数的情况下应返回整个表。但是,如果传递了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
只是想知道返回表的所有条目的语法/逻辑中是否有错误?
谢谢
你想测试使用空=,一个比较操作。如果您使用ANSI空值,反对任何比较null的false。
=
null
false
以下@studentId是 所有 值(或null)在哪里false:
@studentId
@studentId = null -- false @studentId > null -- false @studentId >= null -- false @studentId < null -- false @studentId <= null -- false @studentId <> null -- false
因此,为了测试null您必须使用特殊谓词**is null** ,即:
**is null**
@studentId is null