J'ai une requête comme:
DECLARE @tmpValue
SET @tmpValue = 0 -- it will be change
SELECT * FROM Animal WHERE AniActive = 1
UNION
IF @tmpValue > 0
SELECT * FROM Animal WHERE.Active = 0
Quand j'utilise comme ça, c'est donner une erreur à cause de la condition if. Je dois utiliser UNION à cause de notre structure.
Comment puis-je l'utiliser avec si condition?
Merci,
John
Déplacez la condition @tmpValue > 0
vers la clause WHERE
comme ceci:
SELECT * FROM Animal WHERE AniActive = 1
UNION
SELECT * FROM Animal WHERE @tmpValue > 0 AND Active = 0
Le meilleur moyen de définir la condition dans Query est l'instruction CASE. vous pouvez mettre n'importe quel nombre de condition dans la requête. L'instruction CASE est utilisée pour mettre des filtres conditionnels dans Query.
Pour EX.
DECLARE @tmpValue
SET @tmpValue = 0 -- it will be change
SELECT * FROM Animal WHERE AniActive = 1
UNION
SELECT * FROM Animal
WHERE
1 = CASE WHEN @tmpValue = 0 THEN 0 ELSE Active = 1 END
votre situation n’est pas trop complexe, mais pour des conditions plus complexes, vous pouvez utiliser une instruction CASE imbriquée dans Query.
Vous pouvez ajouter votre condition à la requête comme ceci. la section section de l'union ne retournera tout simplement aucun résultat si votre condition de test est fausse:
DECLARE @tmpValue
SET @tmpValue = 0 -- it will be change
SELECT * FROM Animal WHERE AniActive = 1
UNION
SELECT * FROM Animal WHERE.Active = 0 and @tmpValue > 0
Voici une façon de faire qui simplifie le code en se débarrassant complètement de l’UNION. Je préfère toujours une solution plus simple dans la mesure du possible. Cela fonctionnera également mieux si select sélectionne une table, car elle ne l’analysera qu’une fois plutôt que (potentiellement) deux fois.
DECLARE @tmpValue
SET @tmpValue = 0 -- it will be change
SELECT * FROM Animal WHERE AniActive = 1 OR @tmpValue > 0