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?
la source
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?
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.
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 .
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.
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.
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.
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_rename
fonctionne (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
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 '-'.
-
lorsque vous pouvez utiliser un trait de soulignement_
et ne pas avoir à mettre le nom entre crochets du tout?