Skip to content
Tiantan
Articles

' CONCAT ' nest pas un nom de fonction intégré reconnu

On février 17, 2021 by admin

Un client a signalé quil sexécutait sur SQL Server 2012, et nous avons livré quelques requêtes de test pour les tests avant une livraison finale, cependant:

 » CONCAT « nest pas un nom de fonction intégré reconnu.

Je comprends que CONCAT() est une nouvelle version -in fonction introduite dans SQL Server 2012, ce qui est très bien, mais on ma demandé dannuler ma modification pour rendre ce 2008R2 compatible sous le couvert de « lutilisateur exécutant la requête peut ne pas avoir les autorisations Transact-SQL pour 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 de SELECT/EXECUTE autorisations pour les fonctions scalaires intégrées, mais est-ce possible, et si tel est le cas, lutilisateur reçoit-il toujours le même texte derreur?

Commentaires

  • Si concat ne fonctionne pas, essayez celui-ci SELECT (c.FirstName+','+c.LastName) AS FULLNAME FROM graduatejob c;
  • CONCAT prend en charge le type décimal concat (ID + ' _ ' + OtherID), lID peut être de type int.
  • Dans les anciennes versions, utilisez plutôt ceci: DECLARE @msg VARCHAR(200) = 'Shrink file completed. Target Size: ' + @TargetSize + ' MB. Timestamp: ' + CURRENT_TIMESTAMP;

La réponse

CONCAT a été introduite dans SQL Server 2012; il nexiste aucun moyen de le faire fonctionner dans SQL Server 2008 R2. Depuis la documentation :

entrez la description de limage ici

Il ny a également aucun moyen de le faire échouer en 2012+, même avec le niveau de compatibilité. Demandez donc à vos employés de vérifier SELECT @@VERSION; sur les deux serveurs; vous « trouverez que là où CONCAT échoue, cest < 11. Afin de rendre votre code compatible avec les versions antérieures, vous aurez besoin pour utiliser lopérateur de concaténation de chaîne standard (+). Je ne sais pas comment vous feriez cela avec une fonction scalaire, à moins que vous nutilisiez toujours le même nombre exact de chaînes dentrée et vous modifiez votre code pour utiliser dbo.CONCAT() au lieu de CONCAT() (il y aura des scénarios où cela compte, plus si votre fonction fait quelque chose que le natif ne 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 ajouter la gestion NULL et d’autres modifications mineures (impossible de vous dire comment modifier exactement votre script existant, si nous pouvons « t voir).

Commentaires

  • Merci, Aaron. Le code est simple à changer, car CONCAT () est simplement utilisé pour joindre certaines chaînes avant un appel SQL dynamique SP_ExecuteSQL. Je voulais simplement confirmer quil ny avait AUCUN moyen de refuser laccès à lutilisation de CONCAT () dans SQL Server 2012
  • @beeks Je ne ' Je ne connais aucun moyen de refuser aux utilisateurs la possibilité dutiliser CONCAT(), non. Je ne ' pas tout à fait suivre ce que cela a sur ce que vous devez faire pour que le code fonctionne sur 2008 R2, cependant. Vous devez supprimer CONCAT(), pas lajouter.
  • oui, je comprends comment rendre le code compatible avec 2008 R2, cela est trivial. Merci davoir confirmé que lon ne peut pas DENY accéder à cette fonction.
  • Juste à noter lors du changement de concat en + vous ' ll faut sassurer que les valeurs concaténées sont des chaînes pour commencer, si vous avez des champs numériques, il essaiera de les ajouter (et échouera car une chaîne nest pas un int) donc sil y a un champ numérique (type), faites assurez-vous de le convertir / transtyper dabord en une chaîne

Answer

Vous pouvez utiliser la fonction ODBC CONCAT comme ceci :

 SELECT {fn CONCAT("foo ", "test") }  

Le problème avec ceci est que cette fonction ne vous permet que deux paramètres à la fois. Donc, à moins que vous ne souhaitiez en utiliser plus de deux comme ceci:

 SELECT {fn CONCAT("foo ", {fn CONCAT("test ", "buddy")}) }  

Vous pourriez aussi utilisez simplement lopérateur « + ».

Written by admin

Laisser un commentaire Annuler la réponse

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Articles récents

  • En utilisant un balun avec un dipôle résonnant
  • Quelle est la différence entre “ ne peut pas ” et “ ne peut pas ”? [dupliquer]
  • “ Profondément apprécié ” ou “ très apprécié ”
  • Que signifie ' idées abstraites '? [fermé]
  • Pourquoi ' t je ne devrais pas utiliser le cryptage ECB?

Archives

  • février 2021
  • janvier 2021
  • décembre 2020
  • novembre 2020
  • Deutsch
  • Nederlands
  • Svenska
  • Norsk
  • Dansk
  • Español
  • Français
  • Português
  • Italiano
  • Română
  • Polski
  • Čeština
  • Magyar
  • Suomi
  • 日本語
  • 한국어

Copyright Tiantan 2021 | Theme by Theme in Progress | Proudly powered by WordPress

Back to top