在sql语句中使用方括号是什么?

我注意到Visual Studio 2008在sql中的列名称周围放置了方括号。 括号是否有优势? 当我手工编写T-SQL时,我从来没有打扰过他们。

示例:Visual Studio:SELECT [column1],[column2]等…

我自己的方式:SELECT column1,column2等…

如果在列名或标识符中使用关键字或特殊字符,则括号是必需的。 你可以命名一个专栏[First Name] (有一个空格) – 但是每当你提到那个专栏时,你都需要使用括号。

为了以防万一,为了一致性,新的工具将它们添加到任何地方。

如果您的列与SQL关键字具有相同的名称,或者在其中包含空格,则它们非常方便。

例:

 create table test ( id int, user varchar(20) ) 

不好了! 关键字'user'附近的语法不正确。 但是这个:

 create table test ( id int, [user] varchar(20) ) 

工作正常。

如果您(出于某种原因)使用带有特定字符的列名称,则它们非常有用。

 Select First Name From People 

将无法正常工作,但将方括号括在列名称周围是可行的

 Select [First Name] From People 

总之,这是一种明确声明对象名称的方法。 列,表,数据库,用户或服务器。

列名可以包含会混淆查询执行引擎的字符和保留字,所以在其周围放置括号可以防止发生这种情况。 比我检查问题更容易,然后处理它,我想。

当列名是保留字时,可以使用括号。

如果以编程方式从不受控制的列名称集合中生成SQL语句,则可以通过始终使用括号来避免出现问题。

另外,某些Sharepoint数据库的名称中包含连字符。 在SQL语句中使用方括号可以正确parsing名称。

我相信它将它们添加到一致性中,只有当列名中有空格或特殊字符时才需要它们,但是在IDE生成SQL时,只要将它们包括在内,就可以使用它们。

无论遵循避免使用保留字的命名约定,Microsoft都会添加新的保留字。 使用括号可以让您的代码升级到新的SQL Server版本,而无需首先编辑客户端代码中的Microsoft新保留字。 这个编辑可能是一个重要的问题。 这可能会导致您的项目过早退休….

当您想在脚本中replace全部时,方括号也可能很有用。 如果批处理包含一个名为@String的variables和一个名为[String]的列,则可以将该列重命名为[NewString],而无需将@String重命名为@NewString。

在20世纪90年代SQL的黑暗时代,这是一个很好的习惯,因为SQLdevise人员试图在字典中添加每个单词作为关键词,为无尽的新function添砖加瓦,他们称之为SQL3草案。

所以它保持兼容性。

而且我发现它有另一个不错的副作用,当你在代码评论和重构中使用grep时,它会有很大帮助。