Я использую MSSQL 2005 Server, и у меня есть следующий запрос SQL.
IF @CategoryId IN (1,2,3)
BEGIN
INSERT INTO @search_temp_table
SELECT * FROM (SELECT d.DataId, (SELECT [Name] FROM Category WHERE CategoryId = d.CategoryId) AS 'Category', d.Description, d.CompanyName, d.City, d.CategoryId,
d.CreatedOn, d.Rank, d.voteCount, d.commentCount, d.viewCount
FROM Data d
INNER JOIN Keyword k
ON d.DataId = k.DataId
WHERE FREETEXT(k.Keyword, @SearchQ) AND d.CategoryId=@CategoryId AND d.IsSearch=1 AND d.IsApproved=1 ) AS Search_Data
END
ELSE
BEGIN
INSERT INTO @search_temp_table
SELECT * FROM (SELECT d.DataId, (SELECT [Name] FROM Category WHERE CategoryId = d.CategoryId) AS 'Category', d.Description, d.CompanyName, d.City, d.CategoryId,
d.CreatedOn, d.Rank, d.voteCount, d.commentCount, d.viewCount
FROM Data d
INNER JOIN Keyword k
ON d.DataId = k.DataId
WHERE FREETEXT(k.Keyword, @SearchQ) AND d.IsSearch=1 AND d.IsApproved=1 ) AS Search_Data
END
В приведенном выше запросе у меня есть условие категории,
d.CategoryId=@CategoryId
, который выполняется, когда передается любая категория, если категория не пропущена, то я не рассматриваю условие категории в предложении where, Для реализации условия категории только тогда, когда если в категории (1,2,3) я использовал Клаус, но мы не можем сделать это в одиночном, где запрос ?? это означает, что просто проверьте, есть ли значения в категории (или если это просто, тогда мы можем проверить только 1,2,3 значения), тогда это условие будет применено, иначе запрос не будет учитывать условие категории.
Есть ли способ использовать операторы CASE или NOT NULL ??