为什么SQL表列名中不允许使用特殊字符?

时间:2015-12-30 14:13:51

标签: sql sql-server

我创建了一个表,并将其中一个列命名为50",SQL接受了它,但后来当我右键单击该表然后单击“编辑前200行”时,SQL Management工作室卡住并停止工作,关闭。

但是我仍然可以编辑其列名中没有特殊字符的其他表。听起来列名中不允许"? 知道如何在列名中加入"

1 个答案:

答案 0 :(得分:8)

您可以使用转义字符包含几乎所有可能需要的字符。因此,您可以拥有一个名为50"的列。然后您将其引用为[50"]。您需要转义特殊字符的名称(基本上是非字母数字或_)或保留字(例如fromselect等)。

也就是说,您不希望在数据库中包含此类名称。使用方括号(在SQL Server中,其他数据库具有不同的转义机制)只会使查询变得混乱,使得它们更难以编写和读取。

为什么SQL有这样的限制?嗯,事实上,它是一种计算机语言,所有计算机语言(我认为)都有这样的局限性。例如,在我能想到的任何语言的变量名中都不允许使用未转义的空格(注释中会注明一些例外情况;)。

语言本身由语法定义(通常非常接近SQL语法的ANSI标准)。语法定义了语言的元素以及它们的开始和结束位置。例如,如果名称中允许使用连字符,则a-b可以是[a-b][a] - [b] - 解析器无法解析的歧义。

SQL可以很容易地在名称中允许更多字符(例如,我不认为~?会导致任何混淆),但确实没有必要。如果你真的想要它们,你总能逃脱它们。