SQL CASE dans la requête – comportement impair

L'utilisation d'une instruction de requête dans une requête semble fonctionner correctement tant que le seul cas auquel vous souhaitez correspondre est une string. Mais si vous voulez mettre ">" plus grand que (date ou nombre), etc, SSMS ajoute automatiquement des apostrophes autour de votre instruction (ci-dessous) comme s'il s'agissait d'une string.

Comment puis-je l'get pour accepter "plus grand que la date" ou "plus grand que le nombre", etc ??

SSMS ajoute les opérateurs autour utilisés dans une instruction CASE dans une requête

Il existe deux types d' expression CASE :

  • L'expression CASE simple compare une expression à un set d'expressions simples pour déterminer le résultat.
  • L'expression CASE recherchée évalue un set d'expressions booleannes pour déterminer le résultat.

Vous voulez une expression CASE recherchée . Cela signifie que le WHEN devrait venir immédiatement après le mot key CASE.

CASE WHEN SoldDate <= SubjectDate THEN ... 

Il existe deux types d'expressions CASE (à partir de msdn ):

Un CASE simple compare l'expression spécifiée pour EQUIVALENCY UNIQUEMENT

SELECT FieldName CASE WHEN 'Blah' THEN 'Foo' ELSE 'Bah' END

Un CASE recherché peut aussi faire des inégalités mais a une syntaxe plus verbeuse:

SELECT CASE WHEN FieldName >= 'Blah' THEN 'Foo' ELSE 'Bah' END

Vous essayez d'utiliser la syntaxe Simple et devez utiliser la syntaxe de search en écrivant explicitement le nom du champ et la comparaison pour chaque évaluation.

Votre syntaxe d'instruction CASE est incorrecte. WHEN devrait venir directement après CASE

Ce:

 CASE SoldDate WHEN ... 

Devrait être ceci:

 CASE WHEN SoldDate <= SubjectDate THEN SoldFor ELSE EstSalePrice END 

Information additionnelle

Jetez un oeil à la documentation MSDN pour des exemples supplémentaires de syntaxe CASE .