Справочные таблицы - PullRequest
       26

Справочные таблицы

3 голосов
/ 27 октября 2008

Почему в SQL Server это так:

[dbo].[table_name]

предпочтительнее для этого:

dbo.table_name

И в этом смысле зачем вообще перечислять dbo, если есть только одна схема?

Ответы [ 10 ]

4 голосов
/ 27 октября 2008

Если имя таблицы содержит ключевые слова, вам придется заключить его в []. Большинство инструментов (например, ORM) используют эту технику, чтобы избежать ошибок или согласованности.

3 голосов
/ 27 октября 2008

Они обычно встречаются в сгенерированном коде - потому что генерация кода легче создавать полностью квалифицированные и экранированные ссылки, чем выводить, что экранирование / квалификация требуются, когда.

3 голосов
/ 27 октября 2008

Позволяет использовать ключевые слова или знаки препинания в названии таблицы.

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

3 голосов
/ 27 октября 2008

Это на всякий случай, если у вас есть ключевое слово в качестве таблицы, например [user]

2 голосов
/ 27 октября 2008

Если существует только одна схема, то префикс имени таблицы не является необходимым или полезным, я думаю. Использование скобок [] полезно, когда у вас есть идентификатор, который является зарезервированным словом на сервере SQL. Если, например, у вас есть таблица с именем Select, вы можете ссылаться на нее как SELECT * FROM [Select], но не как SELECT * FROM Select.

1 голос
/ 29 октября 2008

[] требуется только в том случае, если имя объекта содержит символы, такие как пробелы, или если это ключевое слово. Как правило, рекомендуется не использовать ни одно из них в качестве имен объектов, поэтому вам никогда не понадобится []. Сказав, что они также не причиняют вреда, если это сгенерированный код и содержит скобки, вы можете также оставить их.
Использование dbo - хорошая идея, потому что

  1. Производительность лучше (см. здесь для некоторых цифр)
  2. В некоторых случаях требуется dbo, например, для вызова пользовательских функций. Я думаю, что лучше всегда включать его.
  3. Несоответствие имени объекта может привести к ошибкам в будущем, если вы создадите несколько схем.
1 голос
/ 27 октября 2008

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

Но я бы рекомендовал не бросать dbo на фронт. Причина в том, что в конечном итоге вы можете начать организовывать свой код в схемы, и тогда вам понадобится префикс. Если вы привыкнете использовать формат schema.table, будет много проще искать в вашем коде места, где используются таблицы.

Допустим, у вас есть таблица с именем dbo.user, и вы решили переместить ее в другую схему. Если вам придется искать в «пользовательском» множестве хранимых процедур или динамическом SQL-запросе, вы, скорее всего, получите массу ложных срабатываний. Вы не можете быть полностью уверены, что сделали все необходимые изменения. Поиск "dbo.user" намного более лаконичен.

0 голосов
/ 27 июля 2014

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

Подробное объяснение и правила для обычных и разделенных идентификаторов можно найти в этой статье .

Из статьи:

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

Тильда (~) дефис, (-) восклицательный знак (!), Левая скобка ({), проценты (%), правая скобка (}), каретка (^), апостроф ('), амперсанд (&), точка (.), левая скобка ((), обратная косая черта (), правая скобка ()), могила (`),

Использование двух соглашений об уточнении имен может повысить производительность (избежать разрешения имен) и избежать двусмысленности в случаях, когда у вас есть, например, одно и то же имя таблицы в двух или более схемах. В этом случае SQL Server будет искать ваш объект в dbo, а если его там нет, он прекращает поиск.

Также, если вы позже захотите использовать этот объект с опцией SCHEMABINDING, он не разрешает неквалифицированные имена объектов.

Надеюсь, это поможет

0 голосов
/ 27 октября 2008

Я бы предпочел не использовать знаки препинания и зарезервированные слова в именах таблиц и столбцов и не использовать квадратные скобки. Это значительно облегчает чтение SQL.

0 голосов
/ 27 октября 2008

Разве это не позволяет вам иметь там какие-нибудь «плохие» предметы, которые вы хотите? Ключевые слова, пробелы и т. Д. ...

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