Instruction IF dans la clause SQL WHERE

Est-il possible de transmettre une valeur à une procédure stockée pour lui indiquer si append ou non une instruction OR à une instruction SQL SELECT?

J'ai essayé quelque chose comme ça, mais ce n'est pas valide:

SELECT xyzName FROM xyz_fields WHERE (xyzType = 'this') UNION ALL (if @status=1 OR (xyzType = 'that')) UNION ALL (if @status2=1 OR (xyzType = 'somethingelse')) 

Un peu comme la construction de la clause WHERE dans SQL plutôt que de bash à nouveau la DB à partir de l'application?

Vous pouvez utiliser Dynamic SQL pour cela.

 declare @SqlQuery varchar(100) Set @SqlQuery = ' SELECT xyzName FROM xyz_fields WHERE xyzType = ''this'' ' if(@status=1) Set @SqlQuery = @SqlQuery + ' OR xyzType = ''that'' ' if(@status2=1) Set @SqlQuery = @SqlQuery + ' OR xyzType = ''somethingelse''' exec(@SqlQuery) 

Les qoutes uniques dans la requête sont échappées en préfixant un autre qoute unique. Donc, dans la requête

 WHERE xyzType = 'this' 

devrait être

 WHERE xyzType = ''this'' 

Je pense que tu veux dire quelque chose comme ça:

 SELECT xyzName FROM xyz_fields WHERE (xyzType = 'this') OR (@status=1 AND (xyzType = 'that')) OR (@status2=1 AND (xyzType = 'somethingelse')) 

La deuxième ligne de la clause where n'offre que des succès lorsque @status est égal à 1 et xyzType est égal à 'that'.

 SELECT xyzName FROM xyz_fields WHERE (xyzType = 'this') OR ((xyzType = 'that') AND @status = 1) OR ((xyzType = 'somethingelse') AND @status2 = 1) 

Quand @status = 1 , ((xyzType = 'that') AND @status = 1) renvoie (xyzType = 'that') , mais quand @status = 0 , ((xyzType = 'that') AND @status = 1) renvoie false et n'affectera pas votre requête.