Я только что опубликовал этот ответ на 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. Без квадратных скобок многие люди столкнулись бы с проблемами при запуске сценариев.