Estou lendo a documentação dos exames do SQL Server 2012 e vi o seguinte ponto:
caso versus isnull versus coalescência
Agora, sei COMO usar cada um, mas não sei QUANDO usar cada um. Por favor, algum corpo poderia esclarecer. Obrigado.
Ps. Por favor, poderíamos ter uma tag para perguntas do exame?
sql-server
sql-server-2012
Stuart Blackler
fonte
fonte
COALESCE
é expandido para,CASE
mas obviamente, em umaCASE
declaração que você mesmo escreve, pode ser mais flexível nasWHEN
condições. ParaISNULL
vsCOALESCE
relacionado / duplicado?Respostas:
ISNULL - disponível apenas no SQL Server. Permite testar e substituir um valor NULL um pelo outro.
COALESCE - padrão ANSI. Permite o teste e a substituição de um valor NULL pelo primeiro valor não nulo em um conjunto de argumentos de tamanho variável. É importante observar que fatores de precedência do tipo de dados neste
No exemplo acima, 'a' é o primeiro valor não nulo, mas os dados dos caracteres têm precedência menor que o número inteiro.
Outra consideração entre ISNULL vs COALESCE é o resultado de ISNULL NÃO é NULL, enquanto o resultado de uma chamada COALESCE é NULLable. Veja a publicação de JRJ ISNULL () <> COALESCE () Embora isso possa parecer trivial, o otimizador de consultas pode fazer planos diferentes com base na nulidade de uma coluna.
Você pode testar facilmente a nulidade de suas expressões isnull / coalesce / case executando-a no dmo sys.dm_exec_describe_first_result_set
CASE - Também uma função escalar padrão ANSI. Eu usaria o CASE nos dois anteriores quando tenho um teste que não pode ser expresso em um escalar simples, mas essa é uma resposta bastante fraca, admito.
fonte
COALESCE
. Obrigado novamenteCASE
é tecnicamente uma expressão, não uma função.ISNULL oferece a possibilidade de retornar 1 repalcement, COALESCE não se limita a um valor, por exemplo,
COALESCE(v1,v2,v3,v4,v5)
se V5 é o único valor que NÃO é NULL, ele será retornadofonte