Мы собираемся предоставить нашим клиентам инструмент, который (помимо всего прочего) создает новую базу данных SQL Server, и я хочу иметь возможность выполнять базовую проверку на имя базы данных, которое они предоставляют. Документация SQL Server объясняет, какие символы действительны в имени базы данных. Однако документация, по-видимому, неверна, поскольку я могу успешно создавать базы данных, чьи имена нарушают документированные правила.
В соответствии с документацией SQL Server для CREATE DATABASE имена баз данных должны соответствовать правилам для идентификаторов; и правила для идентификаторов зависят от уровня совместимости базы данных. Когда уровень совместимости равен 100 (который, согласно SQL Server Management Studio, означает "SQL Server 2008" ), имя должно начинаться с буквы Unicode, _
, @
или #
; за которыми следуют одна или несколько букв, цифр, @
, $
, #
или _
. В документации четко указано, что встроенные пространства или специальные символы не разрешены.
Это летит перед доступными доказательствами, потому что я могу использовать SQL Server Management Studio для создания базы данных с именем This & That | "Other"
- которая не только содержит встроенные пространства (явно запрещенные), но и содержит специальные символы (|
, "
), которые даже не действительны в имени файла. Я проверил, и уровень совместимости базы данных действительно "SQL Server 2008 (100)", хотя его имя задокументировано как недопустимое на этом уровне совместимости.
Черт, я даже могу сделать CREATE DATABASE " "
(да, это одно пространство), что доказывает, что первый символ не должен быть буквой, подчеркиванием, знаком или значком фунта.
Итак, я думаю, мой вопрос в том, какие символы действительны в имени базы данных SQL Server? Существуют ли документированные правила, совместимые с фактическим поведением SQL Server?