可以在 SQL Server 数据库名称中放置点吗?

Sea*_*ron 34 sql-server

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

Eri*_*elp 68

可以,但我不会。您总是必须用方括号括起 DB 名称,例如 [MyApp.Sales]。

所以总结一下:如果您重视自己的理智,请不要这样做。


Mar*_*icz 38

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

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

server_name.database_name.schema_name.object_name
Run Code Online (Sandbox Code Playgroud)

想象一下,如果他们看到这样的事情会发生什么:

MAIN-SQL.[MyApp.Sales].hr.CompetitorsProducts
Run Code Online (Sandbox Code Playgroud)

或者:

[MAIN-SQL\EXPRESS].[MyApp.Sales].sch_HR.[Products From.Our-Competitors]
Run Code Online (Sandbox Code Playgroud)

保持简单很重要。


小智 16

如果其他人遇到这个问题......

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

甚至微软本身也有这方面的问题。如果您尝试使用 Microsoft Query(通过 ODBC)将您的数据库连接到 Excel 工作表,您将获得一个配置向导,让您选择要连接的数据库。但是,选择包含点的数据库将产生一个错误,指出无法找到服务器。向导似乎不会检查值是否需要转义并盲目地连接标识符。

当然有变通方法,但是如果从一开始就不这样做,可以为自己省去一些麻烦。


小智 10

不要在数据库名称、出版物名称、用户名中使用句点。我强烈建议永远不要在名称中使用句点(列、表、视图、数据库等)。

更新:我可以确认,减号、破折号“-”会导致类似的问题。

这是发生的事情:

SQL Server 将脚本用于内部使用,如系统存储过程。如这里已经提到的,命令你使用有时会迫使你把名字放在括号,这是(微软严重?)不是(总是)还好存储过程使用

事实上,我无法再清理 abonnement 信息,因为存储过程遍历所有数据库并且没有正确地转义数据库名称。这个迭代很复杂,我无法在超过 8 个 SP 中修补它。

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

这些是我遇到的情况。复杂的 SQL 操作是用 sql 语言处理的,如果基础很好的话,它也能正常工作。

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

这些错误可能更常见于 3rd 方软件中,因此永远不要在 sql server 上的任何名称中使用点。


小智 9

名称中允许使用许多字符,但惯例和常识限制了特殊字符的使用。'_'(下划线)是经过验证的最安全的分隔符,并保持可读性。