这是存储过程的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)

07-26 03:08