这是存储过程的create语句:
Create Procedure SearchCreatedAssignments
(@LessonName Varchar(50), @DateFrom date, @DateTo Date, @LocationCode Varchar(10))
As
BEGIN
基本上,我想编写一个基于参数值搜索数据库的查询。例如:
Select *
from dbo.test
where (LessonName = @LessonName)
AND (StartDate = @DateFrom)
AND (EndDate = @DateTo)
AND (LocationCode = @LocationCode)
很简单,对吧?但是,如果这些参数中的任何一个为空(或包含一个空字符串),我想从搜索中忽略它们,而仅按不为空的参数进行搜索。我在想这样的事情:
--if @LocationCode is null OR @LocationCode = '' -> omit @LocationCode from the search
这显然是伪代码。我怎样才能做到这一点?如果这是简单的任务,请原谅。我是SQL新手。
最佳答案
考虑以下。如果参数为NULL或为空,则默认值为相关字段
Select *
from dbo.test
where LessonName = IsNull(NullIf(@LessonName,''),LessonName)
AND StartDate = IsNull(NullIf(@DateFrom,''),StartDate)
AND EndDate = IsNull(NullIf(@DateTo,''),EndDate)
AND LocationCode = IsNull(NullIf(@LocationCode,''),LocationCode)