Почему пробел является допустимым именем столбца в SqlServer? - PullRequest
10 голосов
/ 23 апреля 2009

Убедитесь сами:

create table #temp ([ ] varchar(1))
insert into #temp values ('1')
select [ ] from #temp

Что в мире является обоснованием для разрешения этого?

Ответы [ 6 ]

10 голосов
/ 23 апреля 2009

Я думаю, что обоснование более похоже на:

Стоит ли это предотвращать функциональность

Я не знаю, как SQL кодируется внутренне, но я подозреваю, что потребовалось бы больше усилий, чтобы предотвратить это, чем разрешить.

9 голосов
/ 23 апреля 2009

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

SELECT a.*, ' ' as [ ], b.*
FROM a
LEFT JOIN b on ...

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

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

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

4 голосов
/ 23 апреля 2009

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

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

4 голосов
/ 23 апреля 2009

Любые допустимые символы могут использоваться между [] для определения имен столбцов и таблиц. Учитывая, что что-то вроде [Столбец] является допустимым (с пробелом), нет причин запрещать использование одного пробела в качестве имени столбца.

Однако завершающие пробелы удаляются так.

[ ] and [  ] (1 & 2 spaces) 
оба будут рассматриваться как
[ ] (1 space).
2 голосов
/ 23 апреля 2009

Мне очень нравится предположение, что я достаточно ответственен, чтобы не навредить себе потенциально опасными функциями. Я сам не нашел веских причин для пробелов в именах объектов, но в некоторых случаях это кажется популярным. Это крайний пример бега с ножницами.

2 голосов
/ 23 апреля 2009

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

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