Как используются квадратные скобки [] в операторах sql?

Я заметил, что Visual Studio 2008 помещает квадратные скобки в имена столбцов в sql. Есть ли у скобок какие-то преимущества? Когда я передаю код T-SQL, я никогда не беспокоился о них.

Пример:

Visual Studio:

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

Мой собственный путь:

SELECT column1, column2 etc...

Хорошо, что в вашем коде SQL вручную никогда не использовались скобки, ваше соглашение об именах базы данных должно исключать имена, для которых нужны скобки.

Christian Oudard 10.09.2008 01:06

Связанный ответ обсуждает параметр QUOTED_IDENTIFIER: stackoverflow.com/questions/19657101/…

Jared Beck 29.10.2014 05:09

Могу добавить, что скобки - это особенность Microsoft. Стандарт SQL фактически использует двойные кавычки ("), которые поддерживает Microsoft также. Если бы Microsoft почувствовала необходимость разграничить все, было бы лучше использовать вместо них стандартные двойные кавычки. Но я полагаю, что это сделало бы перенос на другую СУБД слишком простым, а этого никогда не будет ...

Manngo 15.12.2017 00:41
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
176
3
147 862
10
Перейти к ответу Данный вопрос помечен как решенный

Ответы 10

Скобки можно использовать, когда имена столбцов являются зарезервированными словами.

Если вы программно генерируете оператор SQL из набора имен столбцов, которые вы не контролируете, вы можете избежать проблем, всегда используя скобки.

Ответ принят как подходящий

Скобки необходимы, если вы используете ключевые слова или специальные символы в именах или идентификаторах столбцов. Вы можете назвать столбец [First Name] (с пробелом), но тогда вам нужно будет использовать скобки каждый раз, когда вы будете ссылаться на этот столбец.

Новые инструменты добавляют их повсюду на всякий случай или для единообразия.

это единственная цель квадратных скобок?

user2140173 08.07.2013 19:33

@mehow, это кажется таким образом, но у меня нет ссылки, указывающей на это явно.

Michael Haren 08.07.2013 20:02

Связанный вопрос: stackoverflow.com/questions/9917196/…

Michael Haren 08.07.2013 20:03

sql также использует квадратные скобки в операторе подобия запроса на выборку для ограничения результатов с помощью регулярных выражений. codeproject.com/Articles/33941/SQL-LIKE-Operator

Jens Frandsen 04.09.2013 22:49

Вы также можете определить имя столбца с именем select, но select select from mytable выдаст ошибку, поэтому select [select] from mytable сделает его допустимым запросом. Какое бы слово ни стало ярким в вашей студии управления SQL, его следует заключить в квадратные скобки, если вы хотите использовать их в качестве имен столбцов / таблиц / sp / и т. д. В MySQL угловые одинарные кавычки `` '' были бы эквивалентом этого.

Baz Guvenkaya 09.02.2017 08:03

И мы используем знак @ в C# для зарезервированных слов. Допустим, я динамически анализирую JSON, и имя одной из моих переменных - params. Поскольку это зарезервированное слово, VS даст ему другой цвет, поэтому вы получите ошибку времени компиляции. Правильное использование будет; dynamic stuff = JObject.Parse(myJSON); bool isItNull = stuff.@params == null;

Baz Guvenkaya 09.02.2017 08:14

это также разрешено в оракуле?

Shivam Arora 06.07.2017 15:20

Никаких призов за угадывание, использование пробелов и зарезервированных слов в названиях столбцов - плохая идея.

Norbert Norbertson 08.12.2017 14:42

Я знаю, что в автоматически сгенерированных запросах ВСЕ заключено в квадратные скобки. Но это потому, что Microsoft слишком ленив, чтобы проверить, действительно ли это требуется. Вы должны использовать квадратные скобки только тогда, когда это абсолютно необходимо.

NoName 10.11.2019 06:24

@BazGuvenkaya. Можете ли вы представить, что ставите знак @ перед каждой переменной C#, «на всякий случай», в будущей версии C# будет добавлено новое ключевое слово? ИМХО это было бы безумием. (Также следует учитывать: разумность написания каждого ключевого слова C# заглавными буквами.)

Jared Thirsk 08.01.2021 17:05

Имена столбцов могут содержать символы и зарезервированные слова, которые будут сбивать с толку механизм выполнения запросов, поэтому их всегда можно заключить в квадратные скобки. Полагаю, это проще, чем проверить наличие проблемы и затем заняться ею.

Я считаю, что он добавляет их туда для согласованности ... они требуются только тогда, когда у вас есть пробел или специальный символ в имени столбца, но проще просто включать их все время, когда IDE генерирует SQL.

Они удобны, если ваши столбцы имеют те же имена, что и ключевые слова SQL, или в них есть пробелы.

Пример:

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

о нет! Неправильный синтаксис рядом с ключевым словом "пользователь". Но это:

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

Работает отлично.

@Blordbeard - это что-то специфическое для Microsoft SQL Server или квадратные скобки также работают одинаково для Oracle, mySQL, PostgreSQL и т. д.?

user3700562 18.08.2018 20:24

Скобки не являются стандартным SQL, не знаю, какие символы используют все механизмы БД. Например: MySQL использует обратные кавычки: stackoverflow.com/questions/2889871/…

Blorgbeard 19.08.2018 06:46

Они полезны, если вы (по какой-то причине) используете, например, имена столбцов с определенными символами.

Select First Name From People

не сработает, но квадратные скобки вокруг имени столбца будут работать

Select [First Name] From People

Короче говоря, это способ явного объявления имени объекта; столбец, таблица, база данных, пользователь или сервер.

Кроме того В именах некоторых баз данных Sharepoint есть дефисы. Использование квадратных скобок в операторах SQL позволяет правильно анализировать имена.

Несмотря на соблюдение соглашения об именах, которое позволяет избежать использования зарезервированных слов, Microsoft действительно добавляет новые зарезервированные слова. Использование скобок позволяет обновить ваш код до новой версии SQL Server без необходимости предварительно редактировать недавно зарезервированные слова Microsoft из вашего клиентского кода. Это редактирование может вызвать серьезную озабоченность. Это может привести к преждевременному прекращению использования вашего проекта ....

Скобки также могут быть полезны, если вы хотите заменить все в скрипте. Если ваш пакет содержит переменную с именем @String и столбец с именем [String], вы можете переименовать столбец в [NewString], не переименовывая @String в @NewString.

Замените все обходные пути: переименуйте @String в $PreserveMe$, затем переименуйте String в NewString, затем переименуйте $PreserveMe$ обратно в @String.

Jared Thirsk 08.01.2021 17:03

В темные времена SQL в 1990-е годы это было хорошей практикой, поскольку разработчики SQL пытались добавить каждое слово в словарь в качестве ключевого слова для бесконечной лавины новых функций, и они назвали это черновиком SQL3.

Таким образом, сохраняется прямая совместимость.

И я обнаружил, что у него есть еще один приятный побочный эффект, он очень помогает, когда вы используете grep при проверке кода и рефакторинге.

Они полезны для идентификации каждого элемента в SQL.

Например:

CREATE TABLE SchemaName.TableName (

Это фактически создаст таблицу с именем SchemaName.TableName в схеме dbo по умолчанию, даже если намерение может заключаться в создании таблицы внутри схемы SchemaName.

Правильный способ будет следующим:

CREATE TABLE [SchemaName].[TableName] (

Теперь он знает, каково имя таблицы и в какой схеме она должна быть создана (правильно в схеме SchemaName, а не в схеме dbo по умолчанию).

Другие вопросы по теме