Нужно ли включать скобки [] при выполнении запроса в SQL Server 2008? - PullRequest
1 голос
/ 09 февраля 2012

У меня установлен SQL Server 2008 Express Edition, и я впервые запускаю SQL-запрос. Я заметил, что если я выбрал отображение первых 1000 строк, запрос помещает квадратные скобки [] вокруг имени базы данных и ее соответствующих столбцов.

  1. Почему в скобках указаны имя базы данных и столбцы?
  2. Есть ли необходимость в них, и если да, то когда?

Ответы [ 3 ]

5 голосов
/ 09 февраля 2012

Я только что опубликовал этот ответ на dba.stack.

Они избегают имен, которые не являются "дружественными" - они могут быть полезны, если имена вашей базы данных содержат специальные символы (такие как пробелы, точки или тире) или представляют ключевые слова SQL (такие как USE или DATABASE :-) ). Без квадратных скобок такой запрос не будет выполнен:

SELECT column FROM database.dbo.table;

Однако, если вы пишете запрос таким образом, ключевые слова игнорируются:

SELECT [column] FROM [database].dbo.[table];

При построении сценариев или написании решений, которые генерируют сценарии из метаданных (например, создание сценария для всех таблиц или всех индексов), я всегда заключаю имена сущностей в квадратные скобки, чтобы они работали независимо от того, какие имена Wonky были реализованы (Я не всегда делаю это для систем, которые я контролирую). Вы можете легко сделать это, используя функцию QUOTENAME, например ::

SELECT QUOTENAME('table'), QUOTENAME('column'), QUOTENAME('database');

Результаты:

[table] [column] [database]

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

3 голосов
/ 09 февраля 2012

Заключение строки в квадратные скобки говорит SQL Server, что он не должен пытаться анализировать то, что находится внутри них.Это позволяет вам использовать такие вещи, как зарезервированные слова SQL (select, table, return и т. Д.), А также пробелы в идентификаторах.Они требуются только в этих случаях, но ни в коем случае не являются вредными.

1 голос
/ 09 февраля 2012

Нет, нет, но это гарантирует, что если у вас есть БД, таблица или столбец, названный как зарезервированное или ключевое слово, например date, то это не будет перепутано с этим ключевым словом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...