Un client a signalé qu'il s'exécutait sur SQL Server 2012, et nous avons toutefois envoyé quelques requêtes de test pour les tests avant une livraison finale:
«CONCAT» n'est pas un nom de fonction intégrée reconnu.
Je comprends qu'il CONCAT()
s'agit d'une nouvelle fonction intégrée introduite dans SQL Server 2012, ce qui est très bien, mais on m'a demandé d'annuler ma modification pour rendre ce 2008R2 compatible sous le prétexte que "l'utilisateur exécutant la requête peut ne pas disposer des autorisations Transact-SQL pour s'exécuter. " Je prouve donc simplement que le client a très probablement une version différente de SQL Server installée dans DEV que dans PROD.
Je ne trouve aucune information sur le refus spécifique d' SELECT/EXECUTE
autorisations pour les fonctions à valeur scalaire intégrées, mais est-ce possible, et si oui, l'utilisateur reçoit-il toujours le même texte d'erreur?
la source
SELECT (c.FirstName+','+c.LastName) AS FULLNAME FROM graduatejob c;
DECLARE @msg VARCHAR(200) = 'Shrink file completed. Target Size: ' + @TargetSize + ' MB. Timestamp: ' + CURRENT_TIMESTAMP;
Réponses:
CONCAT
a été introduit dans SQL Server 2012; il n'y a aucun moyen de le faire fonctionner dans SQL Server 2008 R2. De la documentation :Il n'y a également aucun moyen de le faire échouer en 2012+, même avec un niveau de compatibilité. Demandez donc à votre personnel de vérifier
SELECT @@VERSION;
sur les deux serveurs; vous constaterez que là oùCONCAT
échoue, il est <11. Afin de rendre votre code compatible avec les versions antérieures, vous devrez utiliser l'opérateur de concaténation de chaîne standard (+
). Je ne sais pas comment vous le feriez avec une fonction scalaire, sauf si vous avez toujours utilisé exactement le même nombre de chaînes d'entrée et que vous modifiez votre code à utiliser à ladbo.CONCAT()
place deCONCAT()
(il y aura des scénarios où cela compte, plus si votre fonction fait quelque chose le natif ne le fait pas, vous voulez un comportement cohérent si / quand vous mettez à niveau). Je ne recommanderais donc pas cette approche. Vous devrez peut-être également ajouterNULL
gestion et autres changements mineurs (impossible de vous dire comment changer exactement votre script existant, si nous ne le voyons pas).la source
CONCAT()
, non. Cependant, je ne comprends pas très bien quelle incidence cela a sur ce que vous devez faire pour que le code fonctionne sur 2008 R2. Vous devez supprimerCONCAT()
, pas l'ajouter.DENY
accéder à cette fonction.Vous pouvez utiliser la fonction ODBC CONCAT comme ceci:
Le problème est que cette fonction ne vous permet que deux paramètres à la fois. Donc, sauf si vous souhaitez en utiliser plus de deux comme ceci:
Vous pourriez tout aussi bien utiliser l'opérateur «+».
la source