Instruction de requête :
La requête suivante tente d'utiliser l'instruction CASE dans la clause WHERE pour filtrer en fonction des valeurs de @locationType et @locationID :
<code class="language-sql">declare @locationType varchar(50); declare @locationID int; SELECT column1, column2 FROM viewWhatever WHERE CASE @locationType WHEN 'location' THEN account_location = @locationID WHEN 'area' THEN xxx_location_area = @locationID WHEN 'division' THEN xxx_location_division = @locationID END;</code>
Erreur :
Cette requête entraîne une erreur de syntaxe car l'expression CASE attend une seule valeur de retour. Diverses clauses WHEN incluaient à tort une comparaison d'égalité (= @locationID) qui n'était pas une expression CASE.
Solution :
La syntaxe correcte pour utiliser une instruction CASE dans une clause WHERE est d'attribuer l'expression à la colonne cible :
<code class="language-sql">declare @locationType varchar(50); declare @locationID int; SELECT column1, column2 FROM viewWhatever WHERE @locationID = CASE @locationType WHEN 'location' THEN account_location WHEN 'area' THEN xxx_location_area WHEN 'division' THEN xxx_location_division END;</code>
Dans cette requête modifiée, l'expression CASE renvoie l'identifiant d'emplacement correspondant en fonction de la valeur de @locationType. La clause WHERE compare ensuite cette valeur avec @locationID pour filtrer les résultats comme prévu.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!