Como o operador '+' se comporta na seguinte instrução?
select + 'taco'; --Result is 'taco'
Está fazendo concatenação de string com a primeira string em branco ('' + 'taco') ou significa outra coisa?
Como o operador '+' se comporta na seguinte instrução?
select + 'taco'; --Result is 'taco'
Está fazendo concatenação de string com a primeira string em branco ('' + 'taco') ou significa outra coisa?
É analisado como um sinal de adição unário e ignorado.
O seguinte foi dado em resposta ao item 718176 do Connect sobre o assunto (o Connect foi desativado desde então e nenhum arquivo desta página está disponível):
(Resposta do Community Wiki gerada a partir de um comentário sobre a pergunta de Martin Smith )
O operador de concatenação de strings "+", por definição, "concatena duas ou mais" strings. http://technet.microsoft.com/en-us/library/ms177561.aspx
Esta consulta é executada com êxito porque a segunda string implícita é a identidade de concatenação não nula (string vazia).
Isso funciona da mesma forma que o operador em
select +1
; o segundo número implícito é a identidade de adição não nula '0'.A sintaxe é permitida devido à necessidade de expressões como
select -1
. Nenhumselect 'taco' +
nemselect 1+
será executado, mas apenas por causa das regras do analisador.Considere os planos de execução gerados por essas instruções SQL (adicionei top(1) para obter um plano):
Os planos de execução são idênticos. O operador "Compute Scalar" não revela nenhuma atividade de concatenação. O Query Optimizer simplifica a expressão de concatenação de identidade antes da execução.