SQL Server IIF frente a CASE

87

Recientemente llegué a conocer la disponibilidad de IIFfunciones en SQL Server 2012. Siempre uso anidado CASEen mis consultas. Quiero saber el propósito exacto de la IIFdeclaración y cuándo deberíamos preferir usar IIFen lugar de CASEDeclaración en la consulta. Principalmente uso anidado CASEen mis consultas.

Gracias por todas las entradas.

neófito
fuente
9
IIF es solo una abreviatura de una declaración CASE simple. Incluso se traduce en una declaración de caso para la optimización y ejecución de consultas: technet.microsoft.com/en-us/library/hh213574.aspx
Sam DeHaan
Es una pena que la taquigrafía no forme parte del estándar (¿qué es en estos días? ¿ANSISQL?) Ya que es mucho más fácil de leer. Pero entonces T-SQL siempre ha sido un poco ... "prolijo".
Neil Barnwell

Respuestas:

144

IIFes lo mismo que CASE WHEN <Condition> THEN <true part> ELSE <false part> END. El plan de consulta será el mismo. Es, quizás, "azúcar sintáctico" como se implementó inicialmente.

CASE es portátil en todas las plataformas SQL, mientras que IIF es específico para SQL SERVER 2012+.

Karl Kieninger
fuente
6
Probablemente para facilitar que los desarrolladores de Access / VB recuerden la sintaxis.
nombre-interesante-aquí
20

IIF es una función de T-SQL no estándar. Se agregó a SQL SERVER 2012, para que Access pudiera migrar a SQL Server sin refactorizar los IIF a CASE de antemano. Una vez que la base de datos de Access se haya migrado por completo a SQL Server, puede refactorizar.

usuario2505560
fuente
13
Me gusta tu razonamiento. ¿Puede apoyarlo citando alguna documentación?
Peter Ivan