J'essaie de trouver un moyen qui aidera à récupérer des enregistrements en fonction d'une condition.
DECLARE @fetchTestDotComStudents BIT = 1
-- Now if @fetchTestDotComStudents is 1 then fetch only @test.com students else fetch all students.
-- Below is the query I used
IF(@fetchTestDotComStudents = 1)
BEGIN
SELECT * FROM Student
WHERE Email LIKE '%@test.com'
END
ELSE IF(@fetchTestDotComStudents = 0)
BEGIN
SELECT * FROM Student
END
3 Réponses :
Utilisez simplement un ou:
SELECT * FROM Student WHERE Email LIKE '%@test.com' OR @fetchTestDotComStudents = 0
Comme je le mentionne dans les commentaires sur la réponse, cela pourrait bien se retrouver avec un plan de requête mal mis en cache. Si @FetTetStestDotCommectstudents code> a une valeur autre que 1, SQL Server mettra en cache le plan pour ce qui est probablement un petit ensemble de données. Lorsqu'une requête pour @fettStestDotCommectstudents = 0 code> est ensuite exécutée, le plan mis en cache sera utilisé et probablement les estimations seront très fausses. La simplicité peut signifier qu'il "n'est pas" un problème, mais avec d'autres requêtes, cela peut causer des problèmes de performance réels; Et pourquoi j'ai recommandé que l'OP est probablement meilleur avec si ... sinon code>.
Vous pouvez faire comme
Si cette table est grande et que vous cherchez fréquemment de cette manière, vous voudrez peut-être envisager d'ajouter une colonne supplémentaire. La clause similaire avec un% de premier plan nécessite une numérisation d'index regroupée de la table entière. Vous pouvez mettre un index non plané sur Istest qui accélérera considérablement votre requête. Si votre table est petite, cela est probablement surchargé.
Je ne suis pas tout à fait sûr de ce que vous demandez, mais ce qui précède semble être la bonne méthode de ce que vous avez. Un cas code> code> sera plus bas la performance et la logique booléenne appropriée entraînerait un plan de requête médiocre pour le scénario Autre i>. Basé sur la simplicité,
si ... sinon code> semble que la bonne chose à faire.Merci @larnu
@Larnu - Avez-vous une référence à sauvegarder ce que vous dites? Toute version récente de SQL Server sera certainement en mesure d'optimiser un plan avec une seule variable ....
Merci à tous pour la solution.
@Milney Que diriez-vous #backtobasics: un exemple de "lavabo de cuisine" mis à jour et CATCH-TOUTES LES QUIES une>?