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

时间:2009-07-07 15:45:36

标签: sql-server

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

所以,一般来说有名字我应该避免给我的表格列吗?

9 个答案:

答案 0 :(得分:3)

只要用'['和']'围绕每个列名称,你使用的内容都无关紧要。即使是空间也可以工作(试试:[])。

编辑:如果在每种情况下都不能使用'['和']',请检查文档中是否包含不允许的字符以及系统固有的关键字;那些将是出界的。在我的头顶,允许(对于SqlServer)标识符的字符是:a-z,A-Z,0-9,_,$,#。

答案 1 :(得分:3)

一般不要以数字开头,不要使用空格,不要使用保留字而不要使用非字母数字字符

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

包围它

这将失败

create table 1abc (id int)

这不会失败

create table [1abc] (id int)

但是现在你需要一直使用[],我会避免使用上面提到的名称

答案 2 :(得分:2)

检查其他答案中指示的保留关键字列表。

为避免在对象名称中包含空格或其他特殊字符,请避免使用引号或方括号使用“引号”。原因是当引用时,对象名称在某些数据库引擎中变为区分大小写(虽然不确定MSSQL)

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

答案 3 :(得分:1)

您应该避免使用任何保留的SQL关键字(例如SELECT),并且从最佳实践中应避免使用空格。

答案 4 :(得分:1)

是的,没有。

  • 是的,因为让名字与关键字相匹配是令人烦恼和困惑的,并且你必须以有趣的方式逃避(当你不能一直逃脱时)
  • 和否,因为如果你正确地逃避它,可以将任何字符序列作为标识符:)

如果必须,请使用[square brackets]"double quotes"来转义多字标识符或关键字,甚至是具有反斜杠或任何其他略微奇怪字符的名称。

答案 5 :(得分:1)

严格来说,没有什么你不能命名你的专栏。但是,如果您避免使用空格,SQL保留字和您正在编程的语言中的保留字,这将使您的生活更轻松。

答案 6 :(得分:1)

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

SELECT [value], [select], [insert] FROM SomeTable

但我喜欢避免这样做,部分原因是因为在任何地方输入方括号都很烦人且因为我通常不会发现像'value'这样的列名特别具有描述性! : - )

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

答案 7 :(得分:1)

您可以在方括号[]中包围一个单词,并且基本上可以使用您想要的任何内容。

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

MS SQL Server 2008 has these reserved words

答案 8 :(得分:0)

请注意在更新时使用方括号,使用以下查询时出现问题:

UPDATE logs SET locked = 1 WHERE [id] IN(SELECT [id] FROM ids)

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

UPDATE logs SET locked = 1 WHERE id IN(SELECT [id] FROM ids)

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

SELECT * FROM logs WHERE [id] IN(SELECT [id] FROM ids)

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

非常奇怪,可能与此知识库错误http://support.microsoft.com/kb/140215

有关

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