Was ist die Verwendung der eckigen Klammern [] in SQL-Anweisungen?

163

Ich habe festgestellt, dass Visual Studio 2008 in SQL eckige Klammern um Spaltennamen setzt. Bieten die Klammern einen Vorteil? Wenn ich Code T-SQL übergebe, habe ich mich nie darum gekümmert.

Beispiel:

Visual Studio:

SELECT [column1], [column2] etc...

Mein eigener Weg:

SELECT column1, column2 etc...
Paulj
quelle
Es ist gut, dass Ihr handcodiertes SQL niemals Klammern benötigt hat. Ihre Datenbanknamenskonvention sollte Namen ausschließen, die Klammern benötigen.
Christian Oudard
Verwandte Antwort diskutiert QUOTED_IDENTIFIER Einstellung: stackoverflow.com/questions/19657101/…
Jared Beck
8
Ich könnte hinzufügen, dass die Klammern eine Microsoft-Eigenart sind. Der SQL - Standard verwendet tatsächlich doppelte Anführungszeichen ( "), die Microsoft auch unterstützt. Wenn Microsoft das Bedürfnis hatte, alles abzugrenzen, wäre es besser gewesen, stattdessen die Standard-Anführungszeichen zu verwenden. Aber ich denke, das hätte es zu einfach gemacht, auf ein anderes DBMS zu portieren, und das wird niemals funktionieren ...
Manngo

Antworten:

181

Die Klammern sind erforderlich, wenn Sie Schlüsselwörter oder Sonderzeichen in den Spaltennamen oder Bezeichnern verwenden. Sie könnten eine Spalte benennen[First Name] (mit einem Leerzeichen) - aber dann müssten Sie jedes Mal Klammern verwenden, wenn Sie auf diese Spalte verweisen.

Die neueren Tools fügen sie überall hinzu, nur für den Fall oder aus Gründen der Konsistenz.

Michael Haren
quelle
3
Ist dies der einzige Zweck der eckigen Klammern?
1
@ irgendwie scheint es so, aber ich habe keine Referenz, die dies explizit angibt.
Michael Haren
2
Verwandte q: stackoverflow.com/questions/9917196/…
Michael Haren
2
SQL verwendet auch eckige Klammern im Like-Operator einer Auswahlabfrage, um die Ergebnisse mithilfe regulärer Ausdrücke einzuschränken. codeproject.com/Articles/33941/SQL-LIKE-Operator
Jens Frandsen
2
Sie können auch einen Spaltennamen mit dem Namen definieren, der selectjedoch select select from mytableeinen Fehler select [select] from mytableauslöst und eine gültige Abfrage darstellt. Jedes Wort, das in Ihrem SQL Management Studio bunt wird, sollte in Klammern stehen, wenn Sie es als Spalten- / Tabellen- / SP- usw. Namen verwenden möchten. In MySQL wären abgewinkelte einfache Anführungszeichen das Äquivalent dazu.
Barry Guvenkaya
59

Sie sind praktisch, wenn Ihre Spalten dieselben Namen wie SQL-Schlüsselwörter haben oder Leerzeichen enthalten.

Beispiel:

create table test ( id int, user varchar(20) )

Ach nein! Falsche Syntax in der Nähe des Schlüsselworts 'Benutzer'. Aber dieses:

create table test ( id int, [user] varchar(20) )

Funktioniert gut.

Blorgbeard ist raus
quelle
@Blordbeard ist dies etwas Spezielles für Microsoft SQL Server oder funktionieren eckige Klammern auch für Oracle, mySQL, PostgreSQL usw. gleich?
user3700562
4
Klammern sind kein Standard-SQL, nicht sicher, welche Zeichen alle DB-Engines verwenden. Zum Beispiel: MySQL verwendet Backticks: stackoverflow.com/questions/2889871/…
Blorgbeard ist
12

Sie sind nützlich, wenn Sie (aus irgendeinem Grund) beispielsweise Spaltennamen mit bestimmten Zeichen verwenden.

Select First Name From People

würde nicht funktionieren, aber das Setzen von eckigen Klammern um den Spaltennamen würde funktionieren

Select [First Name] From People

Kurz gesagt, es ist eine Möglichkeit, einen Objektnamen explizit zu deklarieren. Spalte, Tabelle, Datenbank, Benutzer oder Server.

GateKiller
quelle
6

Spaltennamen können Zeichen und reservierte Wörter enthalten, die die Abfrageausführungs-Engine verwirren. Wenn Sie also jederzeit Klammern um sie setzen, wird dies verhindert. Einfacher als nach einem Problem zu suchen und es dann zu lösen, denke ich.


quelle
5

Die Klammern können verwendet werden, wenn Spaltennamen reservierte Wörter sind.

Wenn Sie die SQL-Anweisung programmgesteuert aus einer Sammlung von Spaltennamen generieren, die Sie nicht steuern, können Sie Probleme vermeiden, indem Sie immer die Klammern verwenden.

Torlack
quelle
5

Unabhängig von der Befolgung einer Namenskonvention, bei der die Verwendung reservierter Wörter vermieden wird, fügt Microsoft neue reservierte Wörter hinzu. Durch die Verwendung von Klammern kann Ihr Code auf eine neue SQL Server-Version aktualisiert werden, ohne dass Sie zuerst die neu reservierten Wörter von Microsoft aus Ihrem Client-Code heraus bearbeiten müssen. Diese Bearbeitung kann ein erhebliches Problem sein. Dies kann dazu führen, dass Ihr Projekt vorzeitig eingestellt wird.

Klammern können auch nützlich sein, wenn Sie Alle in einem Skript ersetzen möchten. Wenn Ihr Stapel eine Variable mit dem Namen @String und eine Spalte mit dem Namen [String] enthält, können Sie die Spalte in [NewString] umbenennen, ohne @String in @NewString umzubenennen.

Rechnung
quelle
5

Während des dunklen Zeitalters von SQL in den 1990er Jahren war es eine gute Praxis, da die SQL-Designer versuchten, jedes Wort im Wörterbuch als Schlüsselwort für eine endlose Lawine neuer Funktionen hinzuzufügen, und sie nannten es den SQL3-Entwurf.

So bleibt die Vorwärtskompatibilität erhalten.

Und ich fand, dass es einen weiteren schönen Nebeneffekt hat, es hilft sehr, wenn Sie grep in Codeüberprüfungen und Refactoring verwenden.

Lothar
quelle
4

Darüber hinaus enthalten einige Sharepoint-Datenbanken Bindestriche in ihren Namen. Durch die Verwendung eckiger Klammern in SQL-Anweisungen können die Namen korrekt analysiert werden.

HSchlarb
quelle
3

Ich glaube, es fügt sie dort hinzu, um die Konsistenz zu gewährleisten. Sie sind nur erforderlich, wenn der Spaltenname ein Leerzeichen oder ein Sonderzeichen enthält. Es ist jedoch sauberer, sie immer dann einzuschließen, wenn die IDE SQL generiert.

Jeff Donnici
quelle