Est-il correct de placer des points dans les noms de base de données SQL Server?

27

Si j'utilise un nom de base de données avec un point dans SQL Server (2005 ou 2008), quelque chose comme "MyApp.Sales", cela causera-t-il des problèmes?

Sean Kearon
la source

Réponses:

60

Vous pouvez , mais je ne le ferais pas. Vous devrez toujours encapsuler le nom de la base de données entre crochets tels que [MyApp.Sales].

Donc, pour récapituler: si vous appréciez votre santé mentale, ne le faites pas.

Eric Humphrey - lotsahelp
la source
36

Je pense que c'est une très mauvaise idée même si c'est techniquement possible.

Au fil des ans, j'ai découvert que de nombreuses personnes ont du mal à comprendre la convention de dénomination en quatre parties, même si cela semble assez évident:

server_name.database_name.schema_name.object_name

Imaginez ce qui se passera s'ils voient quelque chose comme ça:

MAIN-SQL.[MyApp.Sales].hr.CompetitorsProducts

ou:

[MAIN-SQL\EXPRESS].[MyApp.Sales].sch_HR.[Products From.Our-Competitors]

Il est important de garder les choses simples .

Marek Grzenkowicz
la source
15

Au cas où quelqu'un d'autre rencontrerait cette question ...

Gardez à l'esprit que ce n'est pas seulement une mauvaise idée car les utilisateurs peuvent être confus, mais aussi parce que certains outils peuvent être confus.

Même Microsoft lui-même a des problèmes avec cela. Si vous essayez de connecter votre base de données à une feuille Excel à l'aide de Microsoft Query (via ODBC), vous obtenez un assistant de configuration qui vous permet de choisir la base de données à laquelle vous souhaitez vous connecter. Cependant, le choix d'une base de données contenant un point produira une erreur indiquant que le serveur est introuvable. Il semble que l'assistant ne vérifie pas si les valeurs doivent s'échapper et concatène aveuglément les identificateurs.

Il existe bien sûr des solutions de contournement, mais vous vous épargnez des ennuis en ne le faisant pas dès le départ.

aKzenT
la source
7

N'utilisez pas de point dans les noms de base de données, les noms de publication, les noms d'utilisateur. Et je recommande fortement de ne jamais utiliser de point dans le nom (colonne, table, vue, base de données, etc.).

Mise à jour: je peux confirmer que le signe moins, le tiret "-" provoque des problèmes similaires.

Voici ce qui se passe:

SQL Server utilise des scripts à usage interne comme les procédures stockées système. Comme déjà mentionné ici, les commandes que vous utilisez vous forceront parfois à mettre le nom entre crochets et ce n'est (sérieusement microsoft?) Pas (toujours) correct pour l'utilisation des procédures stockées .

En fait, je ne suis plus en mesure de nettoyer les informations d'abonnement car la procédure stockée parcourt toutes les bases de données et n'échappe pas correctement aux noms de base de données. Cette itération est si complexe que je n'ai pas pu le patcher dans plus de 8 SP.

De plus, je ne suis pas en mesure d'utiliser MMC ou des scripts pour modifier les conflits de réplication . Si vous avez une (une!) Base de données qui a un point à l'intérieur de son nom, ces problèmes se produiront sur everey db, chaque publication.

Ce sont les événements que j'ai. Les actions SQL complexes sont traitées en langage SQL et fonctionneront correctement si la base est correcte.

Si vous essayez de connecter votre base de données à une feuille Excel à l'aide de Microsoft Query (via ODBC), vous obtenez un assistant de configuration qui vous permet de choisir la base de données à laquelle vous souhaitez vous connecter. - aKzenT

Ces erreurs peuvent plus souvent être trouvées dans des logiciels tiers, donc n'utilisez jamais de points dans tous les noms de quoi que ce soit sur le serveur SQL.

Daniel
la source
6

Il y a beaucoup de caractères autorisés dans les noms, mais la convention et le bon sens limitent l'utilisation des caractères spéciaux. '_' (trait de soulignement) est le séparateur le plus sûr et le plus facile à lire.

user48235
la source
1

Même accord: le nom de la clé étrangère ne doit contenir aucun point.

J'ai trouvé que si vous devez renommer un tel nom, vous aurez besoin de crochets pour que cela sp_renamefonctionne (car lorsque vous renommez une clé étrangère, vous devez spécifier le schéma).

Exemple:

sp_rename '[MySchema].[MyFKName.With.Dots]' 'NewFKName' 'OBJECT'

Si vous oubliez les crochets, vous obtenez une erreur: 15225

Ozzie
la source
-1

L'un de nos fournisseurs a choisi d'introduire le nom du schéma: [System.Activities.DurableInstancing]. Il a cassé notre outil de chargement de données, nous avons donc maintenant de nouveaux développements pour faire face à leur étrangeté. Ne le fais pas. Utiliser un '-'.

marque
la source
5
Pourquoi utiliser un tiret -lorsque vous pouvez utiliser un trait de soulignement _et ne pas avoir à mettre le nom entre crochets du tout?
ErikE
3
Un moins entraînera d'autres problèmes similaires.
Daniel