Um cliente relatou que estava executando no SQL Server 2012 e, no entanto, entregamos algumas consultas de teste para teste antes de uma entrega final:
'CONCAT' não é um nome de função integrado reconhecido.
Eu entendo que CONCAT()
é uma nova função interna introduzida no SQL Server 2012, que está tudo bem, no entanto, fui solicitado a reverter minha alteração para tornar este 2008R2 compatível sob o pretexto de "o usuário que executa a consulta pode não tem permissões Transact-SQL para executar." Então, estou apenas provando que o cliente provavelmente tem uma versão diferente do SQL Server instalada no DEV do que no PROD.
Não consigo encontrar nenhuma informação sobre especificamente negar SELECT/EXECUTE
permissões para funções de valor escalar internas, mas é possível e, em caso afirmativo, o usuário ainda recebe o mesmo texto de erro?
CONCAT
foi introduzido no SQL Server 2012; não há como fazê-lo funcionar no SQL Server 2008 R2. Da documentação :Também não há como fazê-lo falhar em 2012+, mesmo com nível de compatibilidade. Portanto, faça com que seu pessoal verifique
SELECT @@VERSION;
os dois servidores; você descobrirá que ondeCONCAT
falha é < 11. Para tornar seu código compatível com versões anteriores, você precisará usar o operador de concatenação de string padrão (+
). Não sei como você faria isso com uma função escalar, a menos que você sempre use exatamente o mesmo número de strings de entrada e altere seu código para usardbo.CONCAT()
em vez deCONCAT()
(haverá cenários em que isso importa, além disso, se sua função fizer alguma coisa o nativo não faz, você quer um comportamento consistente se/quando você atualizar). Então eu não recomendaria essa abordagem. Você também pode precisar adicionarNULL
manipulação e outras pequenas alterações (impossível dizer a você como alterar seu script existente exatamente, se não pudermos vê-lo).Você pode usar a função ODBC CONCAT assim:
O problema com isso é que esta função só permite dois parâmetros por vez. Então, a menos que você queira usar mais de dois assim:
Você também pode usar o operador '+'.