SQL Server IIF vs CASE

87

Recentemente, fiquei sabendo da disponibilidade de IIFfunção no SQL Server 2012. Sempre uso aninhado CASEem minhas consultas. Quero saber o propósito exato da IIFinstrução e quando devemos preferir usar IIFa CASEinstrução na consulta. Eu uso principalmente aninhado CASEem minhas consultas.

Obrigado por todas as entradas.

neófito
fonte
9
IIF é apenas uma abreviação para uma instrução CASE simples. Ele é até traduzido em uma declaração de caso para otimização e execução de consulta: technet.microsoft.com/en-us/library/hh213574.aspx
Sam DeHaan
É uma pena que a abreviação não faça parte do padrão (o que é hoje em dia? ANSISQL?), Pois é muito mais fácil de ler. Mas o T-SQL sempre foi um pouco ... "prolixo".
Neil Barnwell de

Respostas:

144

IIFé o mesmo que CASE WHEN <Condition> THEN <true part> ELSE <false part> END. O plano de consulta será o mesmo. É, talvez, "açúcar sintático", conforme implementado inicialmente.

CASE é portátil em todas as plataformas SQL, enquanto o IIF é específico do SQL SERVER 2012+.

Karl Kieninger
fonte
6
Provavelmente para tornar mais fácil para os desenvolvedores do Access / VB lembrar a sintaxe.
nome-interessante-aqui
20

IIF é uma função T-SQL não padrão. Ele foi adicionado ao SQL SERVER 2012, para que o Access pudesse migrar para o SQL Server sem refatorar os IIFs para CASE de antemão. Depois que o banco de dados do Access é totalmente migrado para o SQL Server, você pode refatorar.

user2505560
fonte
13
Eu gosto do seu raciocínio. Você pode apoiá-lo citando alguma documentação?
Peter Ivan