Sin embargo, un cliente informó que se estaba ejecutando en SQL Server 2012, y entregamos algunas consultas de prueba antes de una entrega final:
'CONCAT' no es un nombre de función incorporado reconocido.
Entiendo que CONCAT()
es una nueva función incorporada introducida en SQL Server 2012, que está muy bien, sin embargo, se me ha pedido que revierta mi cambio para hacer que este 2008R2 sea compatible bajo la apariencia de "el usuario que ejecuta la consulta no puede tiene permisos de Transact-SQL para ejecutar ". Así que solo estoy demostrando mi punto de que el cliente probablemente tenga una versión diferente de SQL Server instalada en DEV que en PROD.
No puedo encontrar ninguna información sobre la denegación específica de SELECT/EXECUTE
permisos para funciones de valor escalar incorporadas, pero ¿es posible, y si es así, el usuario sigue recibiendo el mismo texto de error?
SELECT (c.FirstName+','+c.LastName) AS FULLNAME FROM graduatejob c;
DECLARE @msg VARCHAR(200) = 'Shrink file completed. Target Size: ' + @TargetSize + ' MB. Timestamp: ' + CURRENT_TIMESTAMP;
Respuestas:
CONCAT
fue introducido en SQL Server 2012; no hay forma de hacerlo funcionar en SQL Server 2008 R2. De la documentación :Tampoco hay forma de hacerlo fallar en 2012+, incluso con el nivel de compatibilidad. Así que haga que su gente verifique
SELECT @@VERSION;
en ambos servidores; encontrará que dondeCONCAT
falla es <11. Para que su código sea compatible con versiones anteriores, deberá usar el operador de concatenación de cadenas estándar (+
). No sé cómo haría esto con una función escalar, a menos que siempre use exactamente la misma cantidad de cadenas de entrada y cambie su código para usar endbo.CONCAT()
lugar deCONCAT()
(habrá escenarios donde sea importante, además si su función hace algo el nativo no lo hace, desea un comportamiento consistente si / cuando actualiza). Entonces no recomendaría ese enfoque. Es posible que también deba agregarNULL
manejo y otros cambios menores (imposible decirle cómo cambiar su script existente exactamente, si no podemos verlo).fuente
CONCAT()
, no. Sin embargo, no entiendo qué relación tiene con lo que debe hacer para que el código funcione en 2008 R2. Necesita eliminarCONCAT()
, no agregarlo.DENY
acceder a esta función.Puede usar la función ODBC CONCAT de esta manera:
El problema con esto es que esta función solo le permite dos parámetros a la vez. Entonces, a menos que quiera usar más de dos como este:
También podría usar el operador '+'.
fuente