Le classement par sqlserver signifie-t-il que les noms de colonne doivent être en casse correcte? Et comment gérer ça

StackOverflow https://stackoverflow.com/questions/496628

Question

Dans SQL Server (2000 ou 2005), est-il possible de définir le classement de la base de données ou du serveur de sorte que les noms d’identificateur (tables, colonnes, etc.) doivent être dans le bon cas? Si tel est le cas, est-ce vrai de tous les classements sensibles à la casse ou s'agit-il d'un paramètre distinct? (J'ai toujours pensé au respect de la casse pour les données, pas pour les noms d'objets).

Cela aurait probablement pour effet de casser une application si ses procédures et requêtes stockées n'étaient pas écrites avec une casse cohérente? Existe-t-il un moyen de résoudre ce problème sans avoir à s'assurer que toutes les requêtes utilisent le casse approprié, par exemple pour définir le classement d'une connexion à une base de données?

Je considère ceci du point de vue d’une application existante qui contient probablement du code SQL inséré de manière incohérente, et je souhaite pouvoir l’exécuter sur des bases de données avec des classements différents. De quels paramètres aurais-je besoin ou avec quel jeu de classements base de données / serveur avec lesquels je ne pourrais pas utiliser l'application?

Était-ce utile?

La solution

Le classement est ce qui détermine si vos requêtes seront sensibles à la casse. Par conséquent, le seul moyen de vous assurer que votre schéma fonctionnera dans plusieurs environnements consiste à rendre vos requêtes sensibles à la casse. Si vos requêtes ne sont pas cohérentes, votre classement DOIT être insensible à la casse, sinon cela ne fonctionnera pas.

http://msdn.microsoft.com/ fr-us / library / aa174903 (SQL.80) .aspx

Une chose à noter est qu'une fois que vous avez configuré votre environnement SQL Server avec un certain classement, vous NE POUVEZ PAS le modifier sans créer une NOUVELLE instance de SQL Server. Si insensible à la casse est généralement la solution. Et ensuite, efforcez-vous d'avoir une cohérence dans vos requêtes.

Je crois qu'une fois qu'un classement est défini, il s'applique aux données et aux métadonnées.

Autres conseils

Le classement est défini dans les versions antérieures de SQL Server, mais en 2005 et au-delà, vous pouvez le modifier par objet, au fur et à mesure de leur création.

Le classement par défaut de la base de données détermine si les objets de la base de données sont traités de manière sensible à la casse dans les requêtes - cela s'applique à tous les noms d'objet: tables, colonnes, etc.

Si le code de votre application provient d'une base de données de classement ne respectant pas la casse, il risque de ne pas s'exécuter sur une base de données de classement sensible à la casse si un objet est référencé de manière incorrecte (vous obtiendrez un message lorsque vous aurez tenté d'exécuter l'instruction ou de créer la procédure stockée. , ou dans une architecture à procédure stockée, vous capturerez tout cela assez rapidement, sauf si vous avez une quantité importante de SQL dynamique).

N'oubliez pas que même si votre code est exécuté, des colonnes individuelles peuvent être définies avec des classements différents de la base de données. Il est donc toujours possible qu'avec un classement différent, votre code se comporte de manière inattendue (par exemple, GROUP BY se comporte différemment).

Vous pouvez définir le classement de chaque objet et définir une valeur par défaut pour la base de données et le serveur.

Comment y faire face? Vous devez appliquer les normes ici. Vous pouvez facilement vous mêler à différentes personnes et écrire avec différents cas.

Le classement s'applique également aux données afin que " bob " ! = " Bob "

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top