2

SQL Server の検索クエリの WHERE 句の条件の 1 つとして、ISNULL を使用して courseId で検索しようとしています。

以下のように、@currentUserId を除くすべての null 値でクエリを実行すると、クエリはレコードを返しません。

私の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))

この状況では、ワイルドカード % は機能しないようです。理由がわかりません。助けてください...

4

1 に答える 1

4

@courseIdが null の場合courseId、 を stringと比較します'%'。演算子は=ワイルドカードを使用しません。

likeの代わりに使用する=か、条件を次のように記述できます。

(@courseId is null or [dbo].[ModuleCourse].[courseId] = @courseId) AND
于 2013-02-19T13:23:59.440 に答える