如果我在SQL Server(2005或2008)中使用带点号的数据库名称,例如“ MyApp.Sales”,这会引起任何问题吗?

#1 楼

您可以,但我不会。您总是必须用方括号将数据库名称包装起来,例如[MyApp.Sales]。

因此要进行回顾:如果您重视理智,请不要这样做。

#2 楼

我认为,即使在技术上可行,这也是一个非常糟糕的主意。

多年来,我发现,即使看起来很明显,许多人仍然难以理解四部分命名约定:

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]


使事情保持简单很重要。

#3 楼

如果其他人遇到此问题...

请记住,这不仅是一个坏主意,因为用户可能会感到困惑,而且还因为某些工具可能会感到困惑。

即使Microsoft本身对此也有问题。如果您尝试使用Microsoft Query(通过ODBC)将数据库连接到excel工作表,则会获得一个配置向导,该向导可让您选择要连接的数据库。但是,选择包含点的数据库将产生错误,指出找不到服务器。似乎该向导不会检查值是否需要转义并且盲目地将标识符连接起来。

当然有工作环境,但是通过从一开始就不这样做就可以避免麻烦。 >

#4 楼

名称中允许使用许多字符,但是约定和常识限制了特殊字符的使用。 “ _”(下划线)是公认的最安全的分隔符,并易于阅读。

#5 楼

不要在数据库名称,发布名称,用户名中使用句点。
我强烈建议您不要在名称中使用句点(列,表,视图,数据库等)。

更新:我可以确认,减号“-”会引起类似的问题。

这是发生的情况:

SQL Server使用内部使用的脚本,例如系统存储过程。如这里已经提到的,您使用的命令有时会迫使您将名称放在方括号中,并且(严重地是Microsoft?)对于存储过程的使用,(总是)不行。

实际上我不是由于存储过程会遍历所有数据库并且不会适当地转义数据库名称,因此能够清除终止信息。这个迭代是如此复杂,我无法在超过8个SP中对其进行修补。

另外,我无法使用MMC或脚本来编辑复制冲突。如果您有一个(One!)数据库,其名称中带有点号,则这些问题将在每个出版物的everey db上发生。

这些就是我所遇到的情况。如果基础很好,复杂的SQL操作将以sql语言处理,并且可以正常工作。


如果尝试使用Microsoft Query(通过ODBC)将数据库连接到excel工作表,则将获得一个配置向导,该向导可让您选择要连接的数据库。 -aKzenT


这些错误可能更经常在第三方软件中发现,因此,切勿在sql服务器上的任何名称的每个名称中都使用点。

#6 楼

同样的做法:外键名称不应包含任何点。

我发现,如果您需要重命名这样的名称,则需要用方括号使sp_rename起作用(因为重命名外键时,需要指定架构)。

示例:

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


如果忘记括号,则会出现错误:15225

#7 楼

我们的供应商之一选择引入模式名称:[System.Activities.DurableInstancing]。它破坏了我们的数据加载工具,因此我们现在有进一步的开发来应对它们的怪异之处。只是不要这样做。使用'-'。

评论


为什么要使用破折号-当您可以使用下划线_而不必完全将名称括在方括号中时?

– ErikE
2015年2月25日在20:00

减号会导致其他但类似的问题。

–丹尼尔(Daniel)
2015年8月11日14:53