Nous allons fournir à nos clients un outil qui (entre autres choses) crée une nouvelle base de données SQL Server, et je veux pouvoir effectuer une validation de base sur le nom de la base de données qu'ils fournissent. La documentation de SQL Server explique quels caractères sont valides dans un nom de base de données. Cependant, la documentation est apparemment incorrecte, car je peux créer avec succès des bases de données dont les noms violent les règles documentées.
Selon la documentation du serveur SQL pour CRÉER UNE BASE DE DONNÉES Les noms des bases de données doivent être conformes aux règles relatives aux identificateurs et aux règles relatives à l'accès aux bases de données. identifiants dépendent du niveau de compatibilité de la base de données. Lorsque le niveau de compatibilité est 100 (ce qui, selon SQL Server Management Studio, signifie "SQL Server 2008"), le nom doit commencer par une lettre Unicode, _
, @
ou #
; suivi d'une ou plusieurs lettres, chiffres, @
, $
, #
ou _
. La documentation indique clairement que les espaces ou les caractères spéciaux incorporés ne sont pas autorisés.
Cela va à l'encontre des preuves disponibles, car je peux utiliser SQL Server Management Studio pour créer une base de données dont le nom est This & That | "Other"
-- qui non seulement contient des espaces intégrés (explicitement interdits), mais aussi des caractères spéciaux ( |
, "
) qui ne sont même pas valables dans un nom de fichier. J'ai vérifié, et le niveau de compatibilité de la base de données est bien "SQL Server 2008 (100)", même si son nom est documenté comme étant invalide à ce niveau de compatibilité.
Heck, je peux même faire CREATE DATABASE " "
(oui, c'est un seul espace), ce qui prouve que le premier caractère est bien pas doit être une lettre, un trait de soulignement, un signe "at" ou un signe "pound".
Donc je suppose que ma question est, quels personnages sont valide dans le nom d'une base de données SQL Server ? Existe-t-il des règles documentées qui sont cohérentes avec le comportement réel de SQL Server ?