2
作爲SQL Server搜索查詢中WHERE子句的條件之一,我試圖通過courseId使用ISNULL進行搜索。ISNULL通配符'%'搜索沒有返回記錄
使用除@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] is PK; nchar(10))
好像通配符%在這種情況下不起作用;我不知道爲什麼。 請幫忙...
Guffa嗨,在LIKE仍然什麼也沒有返回,但條件子句預期返回正確的結果。許多的後裔;我認爲我從字面上丟失了頭髮...... – 2013-02-19 13:28:58
@ user1748443:啊,你也有'nchar(10)'數據類型的問題,表達式'ISNULL(@courseId,'%')'不會返回當'@ courseId'爲空時''%''',它會返回填充長度爲10的空格。您可能需要使用'nvarchar(10)'。 – Guffa 2013-02-19 13:32:44
謝謝;這是LIKE的問題.. – 2013-02-19 14:24:30