Я заметил, что Visual Studio 2008 помещает квадратные скобки в имена столбцов в sql. Есть ли у скобок какие-то преимущества? Когда я передаю код T-SQL, я никогда не беспокоился о них.
Пример:
Visual Studio:
SELECT [column1], [column2] etc...
Мой собственный путь:
SELECT column1, column2 etc...
Связанный ответ обсуждает параметр QUOTED_IDENTIFIER: stackoverflow.com/questions/19657101/…
Могу добавить, что скобки - это особенность Microsoft. Стандарт SQL фактически использует двойные кавычки ("), которые поддерживает Microsoft также. Если бы Microsoft почувствовала необходимость разграничить все, было бы лучше использовать вместо них стандартные двойные кавычки. Но я полагаю, что это сделало бы перенос на другую СУБД слишком простым, а этого никогда не будет ...





Скобки можно использовать, когда имена столбцов являются зарезервированными словами.
Если вы программно генерируете оператор SQL из набора имен столбцов, которые вы не контролируете, вы можете избежать проблем, всегда используя скобки.
Скобки необходимы, если вы используете ключевые слова или специальные символы в именах или идентификаторах столбцов. Вы можете назвать столбец [First Name] (с пробелом), но тогда вам нужно будет использовать скобки каждый раз, когда вы будете ссылаться на этот столбец.
Новые инструменты добавляют их повсюду на всякий случай или для единообразия.
это единственная цель квадратных скобок?
@mehow, это кажется таким образом, но у меня нет ссылки, указывающей на это явно.
Связанный вопрос: stackoverflow.com/questions/9917196/…
sql также использует квадратные скобки в операторе подобия запроса на выборку для ограничения результатов с помощью регулярных выражений. codeproject.com/Articles/33941/SQL-LIKE-Operator
Вы также можете определить имя столбца с именем select, но select select from mytable выдаст ошибку, поэтому select [select] from mytable сделает его допустимым запросом. Какое бы слово ни стало ярким в вашей студии управления SQL, его следует заключить в квадратные скобки, если вы хотите использовать их в качестве имен столбцов / таблиц / sp / и т. д. В MySQL угловые одинарные кавычки `` '' были бы эквивалентом этого.
И мы используем знак @ в C# для зарезервированных слов. Допустим, я динамически анализирую JSON, и имя одной из моих переменных - params. Поскольку это зарезервированное слово, VS даст ему другой цвет, поэтому вы получите ошибку времени компиляции. Правильное использование будет; dynamic stuff = JObject.Parse(myJSON); bool isItNull = stuff.@params == null;
это также разрешено в оракуле?
Никаких призов за угадывание, использование пробелов и зарезервированных слов в названиях столбцов - плохая идея.
Я знаю, что в автоматически сгенерированных запросах ВСЕ заключено в квадратные скобки. Но это потому, что Microsoft слишком ленив, чтобы проверить, действительно ли это требуется. Вы должны использовать квадратные скобки только тогда, когда это абсолютно необходимо.
@BazGuvenkaya. Можете ли вы представить, что ставите знак @ перед каждой переменной C#, «на всякий случай», в будущей версии C# будет добавлено новое ключевое слово? ИМХО это было бы безумием. (Также следует учитывать: разумность написания каждого ключевого слова C# заглавными буквами.)
Имена столбцов могут содержать символы и зарезервированные слова, которые будут сбивать с толку механизм выполнения запросов, поэтому их всегда можно заключить в квадратные скобки. Полагаю, это проще, чем проверить наличие проблемы и затем заняться ею.
Я считаю, что он добавляет их туда для согласованности ... они требуются только тогда, когда у вас есть пробел или специальный символ в имени столбца, но проще просто включать их все время, когда 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 и т. д.?
Скобки не являются стандартным SQL, не знаю, какие символы используют все механизмы БД. Например: MySQL использует обратные кавычки: stackoverflow.com/questions/2889871/…
Они полезны, если вы (по какой-то причине) используете, например, имена столбцов с определенными символами.
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.
В темные времена SQL в 1990-е годы это было хорошей практикой, поскольку разработчики SQL пытались добавить каждое слово в словарь в качестве ключевого слова для бесконечной лавины новых функций, и они назвали это черновиком SQL3.
Таким образом, сохраняется прямая совместимость.
И я обнаружил, что у него есть еще один приятный побочный эффект, он очень помогает, когда вы используете grep при проверке кода и рефакторинге.
Они полезны для идентификации каждого элемента в SQL.
Например:
CREATE TABLE SchemaName.TableName (
Это фактически создаст таблицу с именем SchemaName.TableName в схеме dbo по умолчанию, даже если намерение может заключаться в создании таблицы внутри схемы SchemaName.
Правильный способ будет следующим:
CREATE TABLE [SchemaName].[TableName] (
Теперь он знает, каково имя таблицы и в какой схеме она должна быть создана (правильно в схеме SchemaName, а не в схеме dbo по умолчанию).
Хорошо, что в вашем коде SQL вручную никогда не использовались скобки, ваше соглашение об именах базы данных должно исключать имена, для которых нужны скобки.