Можно ли ставить точки в именах баз данных SQL Server?


27

Если я использую имя базы данных с точкой в ​​SQL Server (2005 или 2008), что-то вроде «MyApp.Sales», это вызовет какие-либо проблемы?

Ответы:


60

Вы можете , но я бы не стал. Вы всегда должны заключать имя БД в квадратные скобки, такие как [MyApp.Sales].

Итак, резюмируем: если вы цените свое здравомыслие, не делайте этого.


36

Я думаю, что это очень плохая идея, даже если это технически возможно.

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

server_name.database_name.schema_name.object_name

Представьте, что произойдет, если они увидят что-то вроде этого:

MAIN-SQL.[MyApp.Sales].hr.CompetitorsProducts

или:

[MAIN-SQL\EXPRESS].[MyApp.Sales].sch_HR.[Products From.Our-Competitors]

Сохранять вещи простыми важно.


15

В случае, если кто-то еще сталкивается с этим вопросом ...

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

Даже у самой Microsoft есть проблемы с этим. Если вы попытаетесь подключить вашу базу данных к листу Excel с помощью Microsoft Query (через ODBC), вы получите мастер настройки, который позволит вам выбрать базу данных, к которой вы хотите подключиться. Однако выбор базы данных, содержащей точку, приведет к ошибке, указывающей, что сервер не найден. Похоже, что мастер не проверяет необходимость экранирования значений и слепо объединяет идентификаторы.

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


7

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

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

Вот что происходит:

SQL Server использует сценарии для внутреннего использования, такие как системные хранимые процедуры. Как уже упоминалось здесь, команды, которые вы используете, иногда вынуждают вас вводить имя в скобки, и это (серьезно?) Не всегда хорошо для использования хранимых процедур .

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

Кроме того, я не могу использовать MMC или сценарии для редактирования конфликтов репликации . Если у вас есть одна (Одна!) База данных, в имени которой есть точка, эти проблемы будут возникать на everey db, в каждой публикации.

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

Если вы попытаетесь подключить вашу базу данных к листу Excel с помощью Microsoft Query (через ODBC), вы получите мастер настройки, который позволит вам выбрать базу данных, к которой вы хотите подключиться. - aKzenT

Эти ошибки чаще встречаются в стороннем программном обеспечении, поэтому никогда не используйте точки в каждом имени чего-либо на сервере sql.


6

В именах допускается много символов, но общепринятый и здравый смысл ограничивает использование специальных символов. '_' (подчеркивание) - это самый надежный разделитель, который обеспечивает удобство чтения.


1

То же самое: имя внешнего ключа не должно содержать никаких точек.

Я обнаружил, что если вам нужно переименовать такое имя, вам понадобятся скобки для sp_renameработы (потому что при переименовании внешнего ключа вам нужно указать схему).

Пример:

sp_rename '[MySchema].[MyFKName.With.Dots]' 'NewFKName' 'OBJECT'

Если вы забудете скобки, вы получите ошибку: 15225


-1

Один из наших поставщиков решил ввести имя схемы: [System.Activities.DurableInstancing]. Он сломал наш инструмент для загрузки данных, так что теперь у нас есть дальнейшее развитие, чтобы справиться с их странностями. Просто не делай этого. Использовать '-'.


5
Зачем использовать тире, -если вы можете использовать подчеркивание _и вообще не заключать имя в квадратные скобки?
ErikE

3
Минус вызовет другие, но похожие проблемы.
Даниэль
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.