J'utilise MSSQL 2005 Server et j'ai la requête SQL suivante.Comment créer une condition unique pour cette requête 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 [email protected] 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
Dans la requête ci-dessus je la condition de la catégorie,
[email protected]
qui est exécutée lorsque toute catégorie est passé, si aucune catégorie est passée alors je ne considère pas la condition de la catégorie dans laquelle l'article, à mettre en œuvre la condition de la catégorie que si la catégorie dans (1,2,3) j'ai utilisé If-Clause, mais ne pouvons-nous pas le faire en un seul où requête? cela signifie simplement vérifier si les valeurs sont là dans la catégorie (ou si c'est facile alors on ne peut vérifier que les valeurs 1,2,3) alors cette condition sera appliquée sinon la requête ne tiendra pas compte de la condition de la catégorie.
Est-il possible d'utiliser des instructions CASE ou NOT NULL?
Cela ne vérifie pas si @Category est en 1,2 ou 3. – Sung
Hmm - La façon dont j'ai lu la question était que les valeurs transmises ne pouvaient être que 1,2 ou 3 et c'était la raison pour laquelle elles étaient dans la déclaration IF. Quoi qu'il en soit, c'est un bon moyen d'implémenter le filtrage optionnel :) –
Cela peut aussi échouer si le CategoryId de la table peut être NULL –