ISNULL通配符'%'搜索没有返回任何记录

时间:2013-02-19 13:20:13

标签: sql-server

作为SQL Server搜索查询中WHERE子句的标准之一,我正在尝试使用ISNULL通过courseId进行搜索。

当使用除@currentUserId之外的所有空值执行查询时,如下所示,查询不返回任何记录。

我的SQL:

    DECLARE @currentUserId int = '6'
    DECLARE @searchString nvarchar(MAX) = NULL
    DECLARE @courseId nchar(10) = NULL
    DECLARE @dateFrom date = NULL
    DECLARE @dateTo date = NULL


    SELECT [questionId],[Question].[moduleId],[questionDate],[questionTopic]
    FROM [dbo].[Question],[dbo].[Module],[dbo].[ModuleCourse]
    WHERE [lecturerId] = @currentUserId AND

    ([dbo].[Question].[moduleId] = [dbo].[Module].[moduleId] AND
    [dbo].[Module].[moduleId] = [dbo].[ModuleCourse].[moduleId]) AND

    ([dbo].[Question].[questionTopic] LIKE ISNULL('%' + @searchString + '%','%') OR
    [dbo].[Question].[questionText] LIKE ISNULL('%' + @searchString + '%','%')) AND

    [dbo].[ModuleCourse].[courseId] = ISNULL(@courseId,'%') AND

    ([dbo].[Question].[questionDate] >= ISNULL(@dateFrom,(SELECT MIN([questionDate])
                                                                FROM [dbo].[Question])) AND
    [dbo].[Question].[questionDate] <= ISNULL(@dateTo,(SELECT(GETDATE()))))

当行

    [dbo].[ModuleCourse].[courseId] = ISNULL(@courseId,'%') AND

被注释掉,结果按预期返回。 ([dbo]。[ModuleCourse]。[courseId]是PK; nchar(10))

似乎通配符%在这种情况下不起作用;我不知道为什么。 请帮忙......

1 个答案:

答案 0 :(得分:4)

如果@courseId为空,您将courseId与字符串'%'进行比较。 =运算符不使用通配符。

您可以使用like代替=,或将条件写为:

(@courseId is null or [dbo].[ModuleCourse].[courseId] = @courseId) AND