对象名称中的句点是不好的做法吗?

时间:2019-03-05 14:47:02

标签: tsql objectname

例如,可以将默认值0的约束命名为DF__tablename.columnname

尽管我对这种不良做法的搜索并没有产生结果,但是在我在SO和许多其他网站上看到的众多限制示例中,我从未发现过一段时期。

2 个答案:

答案 0 :(得分:2)

在对象名称中使用句点是不正确的做法。

不要在标识符中使用点字符。是的,可以做到,但弊大于利。


tl; dr

常规标识符中不允许使用特殊字符(例如点)。如果标识符不符合常规标识符的规则,则对标识符的引用必须括在方括号(或ANSI双引号)中。

https://docs.microsoft.com/en-us/sql/relational-databases/databases/database-identifiers?view=sql-server-2017

就句点(点字符)而言,在常规标识符中不允许在标识符中使用;但可以在方括号内使用。

在SQL中,点字符甚至更像是一种特殊字符;它用于将标识符与前面的限定符分开。

  SELECT mytable.mycolumn FROM mytable

我们也可以将其写为

  SELECT [mytable].[mycolumn] FROM mytable

我们也可以写

  SELECT [mytable.mycolumn] FROM mytable

但这意味着非常不同。这样,我们就没有引用名为mycolumn的列,而是引用了包含点字符的标识符。

SQL Server可以解决这个问题。

但是,如果这样做,并开始在标识符中使用点号字符,将会给未来的读者带来困惑和沮丧。通过在标识符中使用点号字符,我们获得的任何好处将远远超过其他缺点。

类似地,为什么我们不创建名为WHERE (1=1) OR的表,也不创建名为SUBSTR(foo.bar,1,10)的列以避免

之类的怪异现象
  SELECT [SUBSTR(foo.bar,1,10)] FROM [WHERE (1=1)] OR]

这可能是有效的SQL,但是它将使未来的读者感到非常沮丧,并导致他们诅咒我们,我们的后代和亲人。不要让他们那样做。为了爱这个世界上所有美好和美好的事物,请勿在标识符中使用点字符。

答案 1 :(得分:0)

在对象名称中包含句点是完全有效的。但是,这要求您在引用对象名称时使用方括号。如果您忘记了这些方括号,则会收到一些错误消息,这些消息对于没有经验的开发人员来说可能不太直观。因此,建议不要在对象名称中使用句点。我还想这是您在互联网上不经常看到对象名称中的句点示例的主要原因。

在您的示例中,您可以使用下划线代替句号,例如:DF__tablename_columnname