在sql语句中使用方括号[]有什么用?

时间:2008-09-09 21:02:24

标签: sql-server sql-server-2005 syntax

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

实施例: 视觉工作室: SELECT [column1],[column2] etc ...

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

10 个答案:

答案 0 :(得分:157)

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

较新的工具只是为了保持一致性而在任何地方添加它们。

答案 1 :(得分:49)

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

示例:

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

哦不!关键字“user”附近的语法不正确。 但是这个:

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

工作正常。

答案 2 :(得分:12)

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

Select First Name From People

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

Select [First Name] From People

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

答案 3 :(得分:6)

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

答案 4 :(得分:5)

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

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

答案 5 :(得分:4)

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

答案 6 :(得分:3)

我相信它会在那里添加它们以保持一致性......只有在列名中有空格或特殊字符时才需要它们,但是当IDE生成SQL时,它们总是包含它们更清晰。

答案 7 :(得分:3)

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

如果要在脚本中替换全部,则括号也很有用。如果批处理包含名为@String的变量和名为[String]的列,则可以将列重命名为[NewString],而不将@String重命名为@NewString。

答案 8 :(得分:2)

在20世纪90年代SQL的黑暗时代,这是一个很好的做法,因为SQL设计者试图将字典中的每个单词添加为关键字,以便无休止地充斥着新功能,他们称之为SQL3草案。

因此它保持了兼容性。

我发现它有另一个很好的副作用,当你在代码审查和重构中使用grep时它会有很大的帮助。

答案 9 :(得分:0)

它们有助于识别 SQL 中的每个元素。

例如:

CREATE TABLE SchemaName.TableName (

这实际上会在默认 SchemaName.TableName 架构下创建名为 dbo 的表,即使其意图可能是在 SchemaName 架构内创建表。

正确的方法如下:

CREATE TABLE [SchemaName].[TableName] (

现在它知道表名是什么以及它应该在哪个架构中创建(正确的是在 SchemaName 架构中,而不是在默认的 dbo 架构中)