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

Pau*_*ulj 152 sql-server syntax

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

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

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

Mic*_*ren 171

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

新的工具将它们添加到任何地方,以防万一或一致.

  • 这是方括号的唯一目的吗? (3认同)
  • 相关问:http://stackoverflow.com/questions/9917196/meaning-of-square-brackets-in-ms-sql-table-designer (2认同)
  • sql还在select查询的like-operator中使用方括号来限制使用正则表达式的结果.http://www.codeproject.com/Articles/33941/SQL-LIKE-Operator (2认同)
  • 你也可以定义一个名为 `select` 的列名,但是 `select select from mytable` 会抛出一个错误,所以 `select [select] from mytable` 会使其成为一个有效的查询。任何在您的 SQL 管理工作室中变得丰富多彩的词,如果您想将它们用作列 / 表 / sp / 等名称,都应该用括号括起来。在 MySQL 中,斜单引号 ```` 相当于这个。 (2认同)
  • 我知道自动生成的查询在所有内容周围都使用方括号。但那是因为微软太懒了,也懒得检查它是否确实需要。仅当绝对需要时才应使用方括号。 (2认同)

Blo*_*ard 55

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

例:

create table test ( id int, user varchar(20) )
Run Code Online (Sandbox Code Playgroud)

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

create table test ( id int, [user] varchar(20) )
Run Code Online (Sandbox Code Playgroud)

工作良好.

  • 括号不是标准SQL,不确定所有数据库引擎使用的字符.例如:MySQL使用反引号:/sf/ask/202291001/ (4认同)

Gat*_*ler 12

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

Select First Name From People
Run Code Online (Sandbox Code Playgroud)

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

Select [First Name] From People
Run Code Online (Sandbox Code Playgroud)

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


Bil*_*ill 8

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

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


Lot*_*har 7

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

所以它保持了向前兼容性。

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


小智 6

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


Tor*_*ack 5

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

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