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