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


164

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

Пример:

Visual Studio:

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

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

SELECT column1, column2 etc...

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

В связанном ответе обсуждается настройка QUOTED_IDENTIFIER: stackoverflow.com/questions/19657101/…
Джаред Бек,

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

Ответы:


182

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

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


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


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

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

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

59

Они удобны, если ваши столбцы имеют те же имена, что и ключевые слова 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

4
Скобки не являются стандартным SQL, не уверен, какие символы используются всеми механизмами БД. Например: MySQL использует обратные
ссылки

12

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

Select First Name From People

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

Select [First Name] From People

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


6

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


5

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

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


5

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

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


5

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

Так что это поддерживает прямую совместимость.

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


4

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


3

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.