2012-07-18 4 views
32

Sto tentando di utilizzare IIF() in un'istruzione select. L'espressione booleana verifica se il valore di un campo è uguale a una stringa vuota. La sintassi è in questo modo:L'istruzione SQL Server 2008 IIF non sembra abilitata

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

sto ottenendo l'errore "errore di sintassi nei pressi ="

Ho provato un semplice test:

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

e sto ottenendo "syntax errror near >"

Questo mi porta a credere che IIF non funzioni affatto.

Sto usando SQL SERVER 2008 R2, c'è qualcosa che deve essere configurato per consentire a IIF() di funzionare? C'è qualcosa nella sintassi che mi manca? Il mio test è semplice come può essere e ottengo ancora l'errore di sintassi.

Qualsiasi aiuto sarebbe apprezzato. Grazie mille!

+3

Questa è una novità per il 2012 –

risposta

61

Come indicato, IIF è una funzionalità SQL2012.

Sostituire il IIF con un CASE (che è quello di SQL 2012 avrebbe fatto comunque)

SELECT CASE field WHEN '' THEN 'ONe action' ELSE 'Another' END 
25

IFF è disponibile a partire da SQL Server 2012. Quindi utilizzare 'Case', invece.

Se siete alla ricerca di una forma più compatta (funzione invece di caso) in SQL Server 2008 è possibile utilizzare:

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

invece di:

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

Allora la vostra dichiarazione di volontà be:

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

1
DECLARE @a int=45 

DECLARE @b int=40 

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

ELSE 'FALSE'   
     END 

È possibile utilizzare questa soluzione anziché IIF.

Problemi correlati