Wir werden unseren Kunden ein Tool zur Verfügung stellen, das (unter anderem) eine neue SQL Server-Datenbank erstellt, und ich möchte eine grundlegende Validierung für den von ihnen bereitgestellten Datenbanknamen durchführen können. Die SQL Server-Dokumentation erläutert, welche Zeichen in einem Datenbanknamen gültig sind. Die Dokumentation ist jedoch offensichtlich falsch, weil ich erfolgreich Datenbanken erstellen kann, deren Namen die dokumentierten Regeln verletzen.Welche Zeichen sind in einem SQL Server-Datenbanknamen gültig?
Laut der SQL Server-Dokumentation für CREATE DATABASE müssen Datenbanknamen den Regeln für Kennungen entsprechen. und die Regeln für identifiers hängen vom Datenbankkompatibilitätsgrad ab. Wenn der Kompatibilitätsgrad 100 ist (was laut SQL Server Management Studio "SQL Server 2008" bedeutet), muss der Name mit einem Unicode-Buchstaben beginnen: _
, @
oder #
; gefolgt von einem oder mehreren Buchstaben, Zahlen, @
, $
, oder _
. Die Dokumentation besagt eindeutig, dass eingebettete Leerzeichen oder Sonderzeichen nicht zulässig sind.
Dies steht in krassem der verfügbaren Beweise, weil ich SQL Server Management Studio verwenden, können eine Datenbank, deren Name This & That | "Other"
zu schaffen - die nicht nur enthält eingebettete Leerzeichen (explizit verboten), aber Sonderzeichen enthält (|
, "
), die in einem Dateinamen nicht einmal gültig sind. Ich überprüfte, und der Kompatibilitätsgrad der Datenbank ist in der Tat "SQL Server 2008 (100)", obwohl der Name auf dieser Kompatibilitätsstufe als ungültig dokumentiert ist.
Heck, kann ich selbst tun CREATE DATABASE " "
(ja, das ist ein Leerzeichen), was beweist, dass das erste Zeichen tut nicht haben einen Brief an sein, unterstreichen, um Zeichen oder Pfund-Zeichen.
Also meine Frage ist, welche Zeichen sind in einem SQL Server-Datenbanknamen gültig? Gibt es dokumentierte Regeln, die mit dem tatsächlichen Verhalten von SQL Server übereinstimmen?
Was ist der Wert bei der Verwendung von ungültigen oder extrem ungewöhnlichen Zeichen für eine Datenbank, Tabelle, etc Name? Anders als sicherzustellen, dass diejenigen, die Ihre Datenbank verwenden müssen, Ihren Namen verfluchen ... –
Es liegt an den Benutzern zu entscheiden, wie die Datenbank aufgerufen werden soll. Wenn sie einen elenden Namen wählen wollen, ist mein Verständnis in diesem Punkt, dass wir sie nicht aufhalten wollen. (Das kann sich ändern, aber ich möchte zumindest wissen, womit wir arbeiten müssen.) –