Ist es in Ordnung, Punkte in SQL Server-Datenbanknamen einzufügen?


27

Wenn ich in SQL Server (2005 oder 2008) einen Datenbanknamen mit einem Punkt darin verwende, etwa "MyApp.Sales", werden dadurch Probleme verursacht?

Antworten:


60

Sie können , aber ich würde nicht. Sie müssten den DB-Namen immer in eckige Klammern wie [MyApp.Sales] setzen.

Um es noch einmal zusammenzufassen: Wenn Sie Ihre geistige Gesundheit schätzen, tun Sie es nicht.


36

Ich denke, es ist eine sehr schlechte Idee, auch wenn dies technisch möglich ist.

Im Laufe der Jahre stellte sich heraus, dass viele Menschen Probleme haben, die vierteilige Namenskonvention zu verstehen, obwohl dies ziemlich offensichtlich erscheint:

server_name.database_name.schema_name.object_name

Stellen Sie sich vor, was passiert, wenn sie so etwas sehen:

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

oder:

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

Es ist wichtig, die Dinge einfach zu halten .


15

Falls jemand anderes auf diese Frage stößt ...

Denken Sie daran, dass dies nicht nur eine schlechte Idee ist, weil Benutzer verwirrt sein könnten, sondern auch, weil einige Tools verwirrt sein könnten.

Auch Microsoft selbst hat damit Probleme. Wenn Sie versuchen, Ihre Datenbank mithilfe von Microsoft Query (über ODBC) mit einem Excel-Arbeitsblatt zu verbinden, erhalten Sie einen Konfigurationsassistenten, mit dem Sie die Datenbank auswählen können, zu der Sie eine Verbindung herstellen möchten. Die Auswahl einer Datenbank mit einem Punkt führt jedoch zu einem Fehler, der besagt, dass der Server nicht gefunden wurde. Es scheint, dass der Assistent nicht überprüft, ob die Werte maskiert werden müssen, und die Bezeichner blind verkettet.

Es gibt natürlich Workarrounds, aber Sie sparen sich Ärger, wenn Sie dies nicht von Anfang an tun.


7

Verwenden Sie Punkt nicht in Datenbanknamen, Veröffentlichungsnamen und Benutzernamen. Und ich empfehle nachdrücklich, niemals einen Punkt im Namen (Spalte, Tabelle, Ansicht, Datenbank usw.) zu verwenden.

Update: Ich kann bestätigen, dass das Minuszeichen "-" ähnliche Probleme verursacht.

Folgendes passiert:

SQL Server verwendet Skripts für die interne Verwendung wie gespeicherte Systemprozeduren. Wie bereits erwähnt, zwingen Sie die Befehle, die Sie verwenden, manchmal dazu, den Namen in Klammern zu setzen, und das ist (im Ernst, Microsoft?) Nicht (immer) in Ordnung für die Verwendung von gespeicherten Prozeduren .

Tatsächlich kann ich Abonnementinformationen nicht mehr bereinigen, da die gespeicherte Prozedur alle Datenbanken durchläuft und den Datenbanknamen nicht ordnungsgemäß entgeht. Diese Iteration ist so komplex, dass ich sie in über 8 SPs nicht patchen konnte.

Außerdem kann ich keine MMC oder Skripts zum Bearbeiten von Replikationskonflikten verwenden . Wenn Sie eine (One!) - Datenbank haben, deren Name einen Punkt enthält, treten diese Probleme bei jeder Veröffentlichung auf.

Das sind die Vorkommnisse, die ich habe. Komplexe SQL-Aktionen werden in SQL verarbeitet und funktionieren einwandfrei, wenn die Basis in Ordnung ist.

Wenn Sie versuchen, Ihre Datenbank mithilfe von Microsoft Query (über ODBC) mit einem Excel-Arbeitsblatt zu verbinden, erhalten Sie einen Konfigurationsassistenten, mit dem Sie die Datenbank auswählen können, zu der Sie eine Verbindung herstellen möchten. - aKzenT

Diese Fehler können häufiger in Software von Drittanbietern auftreten. Verwenden Sie daher niemals Punkte in allen Namen von Objekten auf einem SQL Server.


6

In Namen sind viele Zeichen zulässig, die Verwendung von Sonderzeichen ist jedoch aufgrund der Konvention und des gesunden Menschenverstands eingeschränkt. '_' (Unterstrich) ist das nachweislich sicherste Trennzeichen und erleichtert die Lesbarkeit.


1

Gleicher Deal: Der Name des Fremdschlüssels sollte keinen Punkt enthalten.

Ich habe festgestellt, dass Sie zum Umbenennen eines solchen Namens Klammern benötigen sp_rename(da Sie beim Umbenennen eines Fremdschlüssels das Schema angeben müssen).

Beispiel:

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

Wenn Sie die Klammern vergessen, erhalten Sie eine Fehlermeldung: 15225


-1

Einer unserer Lieferanten hat sich entschieden, den Schemanamen einzuführen: [System.Activities.DurableInstancing]. Unser Dataload-Tool ist kaputt, daher haben wir jetzt weitere Entwicklungsschritte, um mit ihrer Verrücktheit fertig zu werden. Tu es einfach nicht. Benutze einen '-'.


5
Warum einen Bindestrich verwenden, -wenn Sie einen Unterstrich verwenden können _und den Namen überhaupt nicht in eckige Klammern setzen müssen?
ErikE,

3
Ein Minus verursacht andere, aber ähnliche Probleme.
Daniel
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.