quand/pourquoi voudriez-vous utiliser QUOTENAME ?
Je comprends que QUOTENAME fonction peut être utilisée pour ajouter des crochets (comportement par défaut) ou un autre caractère wrapper. QUOTENAME ne fonctionne pas pour des chaînes plus longues (plus de 128 caractères). Donc ma question est, pourquoi/quand vous l'utiliser au lieu de la plus classique et beaucoup plus facilement lisible par la concaténation de chaîne. Pourquoi ne pas simplement concaténer une apostrophe ou un crochet au début et à la fin d'un terme et d'utiliser cette fonction à la place?
Quotename ajoute un niveau d'encapsulation à travers le mécanisme utilisé pour échapper à la chaîne. E. g. Si dans une Future version de Sql Microsoft pourrait changer la valeur par défaut char à " aligner de plus près à toutes les normes Ansi.
Un exemple spécifique de lors de la concaténation est pire stackoverflow.com/questions/39919037/...
Merci Martin, Désolé, je ne voir qu'une seule lors de mes recherches ici. Mais je trouve votre réponse très utile.
Un exemple spécifique de lors de la concaténation est pire stackoverflow.com/questions/39919037/...
Merci Martin, Désolé, je ne voir qu'une seule lors de mes recherches ici. Mais je trouve votre réponse très utile.
OriginalL'auteur LearnByReading | 2016-11-15
Vous devez vous connecter pour publier un commentaire.
Il est/a été spécialement conçu pour la citation de la colonne/table/base de données des noms – sysnames. Par exemple, ceci:
SELECT QUOTENAME('abc[]def')
retourne[abc[]]def]
toutSELECT '[' + 'abc[]def' + ']'
retourne[abc[]def]
qui n'est pas valide pour l'utiliser comme une colonne/table/nom de base de données.En outre, le SQL-99 standard est de citer l'aide d'une seule citation de caractères, et alors que les versions de Sql Server continuer à utiliser des crochets, il peut à l'avenir (ou être configurable pour être) utiliser le SQL-99 standard. Dans ce cas, l'ensemble du code à l'aide de QUOTENAME continuera à fonctionner correctement, alors que le code qui essaie de faire de son propre échapper échouera.
Il y a de plus en plus subtiles de ses conséquences. Depuis QUOTENAME a exactement les mêmes limitations de type sysname, Microsoft devrait décidez de changer de type sysname à plus de 128 caractères (256 peut-être? 32767 peut-être?), il serait supposé que QUOTENAME serait également en mesure de gérer l'augmentation de ces tailles. L'utilisation de QUOTENAME est un coffre-fort(r) moyen de prendre un nom de colonne à partir d'une source non fiable, et de l'utiliser comme un type sysname, quelle que soit l'actuelle/future paramètres de base de données sans avoir à se soucier du bord de cas (par exemple ] ou ' à l'intérieur de l'entrée) et si elle permettra à la chaîne de sortir de la colonne nom pour créer des attaques par injection SQL. Je ne serais probablement pas dépendre uniquement de cette fonctionnalité pour la sécurité, mais pour être utilisé dans l'une des nombreuses couches de protection.
Comme une note de côté, de type sysname n'a pas toujours été de type nvarchar(128). Dans Sql Server 6.5, il est de type varchar(30). Donc, il a changé dans le passé. Très peu de raison qu'il ne pouvait pas changer de nouveau dans l'avenir.
OriginalL'auteur Robert McKee
Vous utilisez
QUOTENAME()
surtout quand vous avez besoin pour construire le sql dynamique. Le SQL dynamique est quelque chose que vous devriez éviter, autant que possible, mais dans de rares situations, il peut être la meilleure façon de résoudre un problème. Lors de la construction de SQL dynamique,QUOTENAME()
est la bonne façon de s'assurer de la table et de la colonne nom de variables qui peuvent inclure des caractères indésirables tels que les espaces ne cause pas de problèmes avec votre dernière instruction SQL.OriginalL'auteur Joel Coehoorn
QuoteName est conçu principalement pour le type SYSNAME, comme les types de données. Ce type sysname type de données est de 128 caractères unicode qui est de type NVARCHAR(128). Donc si c'est plus de 128 caractères, vous devez utiliser la méthode traditionnelle de la concaténation. Mais nous pouvons utiliser QUOTENAME pour varchar, nvarchar et de type sysname types de données..
OriginalL'auteur Kannan Kandasamy