关于sql server:sql语句中的方括号[]有什么用?

关于sql server:sql语句中的方括号[]有什么用?

What is the use of the square brackets [] in sql statements?

我注意到Visual Studio 2008在sql中的列名周围放置了方括号。 支架有什么优势吗? 当我编写代码T-SQL时,我再也不会打扰他们。

例:

视觉工作室:

1
SELECT [column1], [column2] etc...

我自己的方式:

1
SELECT column1, column2 etc...

如果您在列名称或标识符中使用关键字或特殊字符,则必须使用方括号。您可以将列命名为[First Name](带空格)-但随后每次引用该列时都需要使用方括号。

较新的工具将它们添加到各处,以防万一或保持一致性。


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

例:

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

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

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

工作正常。


如果您(出于某种原因)使用带有某些字符的列名,则它们很有用。

1
Select First Name From People

将不起作用,但在列名周围放置方括号将起作用

1
Select [First Name] From People

简而言之,这是一种显式声明对象名称的方法。列,表,数据库,用户或服务器。


列名可以包含字符和保留字,这会使查询执行引擎感到困惑,因此始终在其周围放置方括号可防止这种情况发生。我想比检查一个问题然后处理它更容易。


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

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


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

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


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


在1990年代SQL的黑暗时代,这是一个好习惯,因为SQL设计人员试图将字典中的每个单词添加为无休止的新功能雪崩的关键字,他们将其称为SQL3草案。

因此,它保持了向前的兼容性。

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


我相信它将它们添加到那里是为了保持一致……仅当您在列名称中使用空格或特殊字符时才需要使用它们,但是在IDE生成SQL时始终将它们包括在内会更干净。


推荐阅读