web-dev-qa-db-fra.com

L'instruction SQL Server 2008 IIF ne semble pas activée

J'essaie d'utiliser IIF() dans une instruction select. L'expression booléenne vérifie si une valeur de champs est égale à une chaîne vide. La syntaxe est la suivante:

SELECT IIF(field = '','ONe action','Another')

J'obtiens l'erreur "erreur de syntaxe près de ="

J'ai essayé un test simple:

SELECT IIF(2 > 1, 'yes','no')

et je reçois "syntax errror near >"

Cela me porte à croire que IIF ne fonctionne pas du tout.

J'utilise SQL SERVER 2008 R2, y a-t-il quelque chose qui doit être configuré pour permettre à IIF () de fonctionner? Y a-t-il quelque chose dans la syntaxe qui me manque? Mon test est aussi simple que possible et j'obtiens toujours l'erreur de syntaxe.

Toute aide serait appréciée. Merci beaucoup!

35
TheMethod

Comme indiqué, IIF est une fonctionnalité SQL2012.

Remplacez votre IIF par un CASE (ce que ferait de toute façon SQL 2012)

 SELECT CASE field WHEN '' THEN 'ONe action' ELSE 'Another' END
69
podiluska

IFF est disponible à partir de SQL Server 2012. Utilisez donc plutôt 'Case'.

Si vous recherchez un formulaire plus compact (fonction au lieu de casse) dans SQL Server 2008, vous pouvez utiliser:

isnull((select 'yes' where 2 > 1),'no')

au lieu de:

SELECT IIF(2 > 1, 'yes','no')

Votre déclaration sera alors:

SELECT isnull((select 'yes' where 2 > 1),'no')

27
Alexander

IIF était introduit dans SQL Server 2012 , c'est pourquoi il ne fonctionne pas dans SQL Server 2008 ou SQL Server 2008 R2.

11
Aaron Bertrand
DECLARE @a int=45

DECLARE @b int=40

SELECT   
      CASE 
         WHEN @A>@B THEN 'True'

 ELSE 'FALSE'         
      END

Vous pouvez utiliser cette solution au lieu de IIF.

2
user7870411