Sql server 在SQL Server表中命名列时,是否有任何名称应避免使用?

Sql server 在SQL Server表中命名列时,是否有任何名称应避免使用?,sql-server,Sql Server,我记得几年前,当我使用PHP时,我可以通过将MySQL列命名为“desc”或任何其他用作运算符的术语来炸毁我的应用程序 所以,一般来说,有哪些名称我应该避免给我的表列命名?只要在每个列名周围都加上“[”和“]”,那么使用什么就无关紧要了。即使是一个空间,也可以尝试它:[] 编辑:如果不能在任何情况下使用“[”和“]”,请检查文档中不允许的字符以及系统固有的关键字;那是不允许的。在我看来,SqlServer允许的标识符字符是:a-z、a-z、0-9、z、$,。通常不以数字开头,不使用空格,不使用保

我记得几年前,当我使用PHP时,我可以通过将MySQL列命名为“desc”或任何其他用作运算符的术语来炸毁我的应用程序


所以,一般来说,有哪些名称我应该避免给我的表列命名?

只要在每个列名周围都加上“[”和“]”,那么使用什么就无关紧要了。即使是一个空间,也可以尝试它:[]


编辑:如果不能在任何情况下使用“[”和“]”,请检查文档中不允许的字符以及系统固有的关键字;那是不允许的。在我看来,SqlServer允许的标识符字符是:a-z、a-z、0-9、z、$,。

通常不以数字开头,不使用空格,不使用保留字,也不使用非字母数字字符

然而,如果你真的想这样做,你仍然可以这样做,但你需要用括号括起来

这将失败

create table 1abc (id int)
这不会失败

create table [1abc] (id int)

但是现在您需要一直使用[],我会避免使用我上面提到的名称,您应该避免使用任何保留的SQL关键字,例如SELECT和from。最佳做法应该避免使用空格。

是和否

是的,因为名字和关键词匹配是令人恼火和困惑的,而且当你不总是转义时,你必须以有趣的方式转义 不,因为如果正确转义,可以将任何字符序列作为标识符:
如果必须,可以使用[方括号]或双引号来转义多字标识符或关键字,甚至转义带有反斜杠或任何其他稍微奇怪字符的名称。

严格地说,没有什么是不能命名列的。但是,如果您在编程语言中避免使用带空格的名称、SQL保留字和保留字,您的生活会更轻松。

只要用方括号括起来,您几乎可以使用任何东西:

SELECT [value], [select], [insert] FROM SomeTable
然而,我喜欢避免这样做,部分原因是到处键入方括号是有意义的,部分原因是我通常不认为像“value”这样的列名特别具有描述性-


只要远离SQL关键字和任何包含字母以外的内容的东西,你就不需要使用那些讨厌的方括号。

你可以将一个单词括在方括号[]中,基本上可以使用任何你喜欢的东西

我不喜欢使用括号,为了做到这一点,你只需要避免保留字


检查保留关键字列表,如其他答案所示

另外,为了在对象名称中使用空格或其他特殊字符,请避免使用引号或方括号进行引用。原因是,在某些数据库引擎中,当引用对象名称时,对象名称会区分大小写,但不确定MSSQL


一些团队对数据库对象表、视图、列(如T_PERSON、V_PERSON、C_NAME等)使用前缀。我个人不喜欢这种约定,但它确实有助于避免关键字问题。

注意在更新时使用方括号,我在使用以下查询时遇到问题:

更新日志集锁定=1,其中[id]在从id中选择[id]

这导致所有记录都被更新,但是,这似乎工作正常:

更新日志集锁定=1,其中id在从id选择[id]中

请注意,此问题似乎特定于更新,因为以下仅返回预期的行,而不是所有行:

从日志中选择*,其中[id]在从id中选择[id]

这是使用MSDE 2000 SP3并使用MS SQL 2000查询分析器V 8.00.194连接到数据库

非常奇怪,可能与这个知识库bug有关


最后,我删除了所有不必要的方括号。

是的,但我仍然建议避免使用“空格”作为名称:-哦,我同意。当我第一次发现你能做到这一点时,我很震惊,甚至在这里问了一个问题。有人向我展示了一个很有用的例子:当您只需测试一个查询时,查询结果的间距会更好。更不用说必须键入所有这些方括号是很困难的!