Um cliente relatou que eles estavam em execução no SQL Server 2012 e, no entanto, entregamos algumas consultas de teste antes da entrega final:
'CONCAT' não é um nome de função incorporado reconhecido.
Entendo que essa CONCAT()
é uma nova função interna introduzida no SQL Server 2012, que está ótima e bem, no entanto, fui solicitado a reverter minha alteração para tornar este 2008R2 compatível sob o pretexto de "o usuário que está executando a consulta não pode tem permissões Transact-SQL para executar. " Portanto, estou apenas demonstrando que o cliente provavelmente tem uma versão diferente do SQL Server instalada no DEV e no PROD.
Não consigo encontrar nenhuma informação sobre como negar SELECT/EXECUTE
permissões especificamente para funções com valor escalar interno, mas é possível? Em caso afirmativo, o usuário ainda recebe o mesmo texto de erro?
SELECT (c.FirstName+','+c.LastName) AS FULLNAME FROM graduatejob c;
DECLARE @msg VARCHAR(200) = 'Shrink file completed. Target Size: ' + @TargetSize + ' MB. Timestamp: ' + CURRENT_TIMESTAMP;
Respostas:
CONCAT
foi introduzido no SQL Server 2012; não há como fazê-lo funcionar no SQL Server 2008 R2. A partir da documentação :Também não há como fazê-lo falhar em 2012 ou mais, mesmo com o nível de compatibilidade. Portanto, seu pessoal deve verificar
SELECT @@VERSION;
nos 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 cadeias padrão (+
). Eu não sei como você faria isso com uma função escalar, a menos que você sempre usasse exatamente o mesmo número de cadeias de entrada e alterasse seu código para usar emdbo.CONCAT()
vez deCONCAT()
(haverá cenários onde isso importa, mais se sua função fizer alguma coisa o nativo não funciona, você deseja um comportamento consistente se / quando 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 exatamente como alterar seu script existente exatamente, se não conseguimos vê-lo).fonte
CONCAT()
, não. No entanto, não entendo exatamente o que isso tem a ver com o que você precisa fazer para que o código funcione no 2008 R2. Você precisa removerCONCAT()
, não adicioná-lo.DENY
acessar esta função.Você pode usar a função ODBC CONCAT assim:
O problema é que essa função permite apenas dois parâmetros por vez. Portanto, a menos que você queira usar mais de dois como este:
Você também pode usar o operador '+'.
fonte