web-dev-qa-db-fra.com

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

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?

28
Sean Kearon

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.

62

Je pense que c'est ne 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]

Garder les choses simple est important.

36
Marek Grzenkowicz

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 évitez quelques ennuis en ne le faisant pas dès le départ.

15
aKzenT

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, 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 c'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 incapable d'utiliser MMC ou des scripts pour modifier les conflits de réplication . Si vous en avez un (One!) 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 chaque nom de quoi que ce soit sur le serveur SQL.

8
Daniel

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.

7
user48235

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 faire sp_rename work (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

1
Ozzie